Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: ML Pipeline CI

on:
# push:
# branches: [ main, master ]
pull_request:
branches: [ main, master ]

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install pytest great_expectations pandas scikit-learn flake8 black mypy pytest-cov
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

- name: Lint with flake8
run: |
flake8 day5/演習3 --count --select=E9,F63,F7,F82 --show-source --statistics
flake8 day5/演習3 --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics

- name: Format check with black
run: |
black --check day5/演習3

- name: Run data tests
run: |
pytest day5/演習3/tests/test_data.py -v

- name: Run model tests
run: |
pytest day5/演習3/tests/test_model.py -v
99 changes: 99 additions & 0 deletions day3/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
# day3 演習用ディレクトリ

第3回「機械学習システムの改善」に関する演習用のディレクトリです。

# 演習の目的

本演習コンテンツでは、技術的な用語や仕組み(例:RAG におけるチャンク処理など)の詳細な理解を目的とするのではなく、AI の性能を向上させるための方法を実際に体験することを主眼としています。
この体験を通じて、複数のデータソースの扱いや、AI に対する適切な入力・文脈の与え方など、実践的なスキルへの理解を深めることを目的とします。

# 演習の内容
主な演習の流れは以下のようになっています。

1. ベースモデルのそのままの状態で質問に回答させる
2. 講義の文字起こしデータを使う
3. チャンク化を行い、文字情報を分割する
4. Rerankにより、質問に関連する内容を取り出せるようにする
5. さらに改善方法を検討する

演習の詳細はノートブックに記載されています。

演習には、「Google Colab」を使うことを想定しています。

講義内の演習の時間では、ディレクトリ内の「ai_engineering_03.ipynb」を使用しています。
このノートブックでは、Google ColabのL4というGPUを使用する想定で作られています。

- [Open with Colab(GPU:L4)](https://colab.research.google.com/github/matsuolab/lecture-ai-engineering/blob/master/day3/ai_engineering_03.ipynb)

## 注意事項
L4はGoogle Colabの無料利用では選択できない可能性があります。

演習として説明を行う都合上、講師の環境では「L4」を使用しますが、受講生の方で「L4」を使用できない場合は、
無料で利用可能な「T4」向けのノートブック「ai_engineering_03_T4.ipynb」も用意したのでこちらを使用して演習を行なってください。

- [Open with Colab(GPU:T4)](https://colab.research.google.com/github/matsuolab/lecture-ai-engineering/blob/master/day3/ai_engineering_03_T4.ipynb)

演習の大まかな流れはどちらのノートブックでも同じように体験できるように構成していますが、細かい部分で内容が異なる場合がある点はご了承をお願いします。
(主な違いとしては、T4のノートブックで利用するモデルの方がサイズが小さいことと、演習として実際に試せる内容が少ない(「5. さらに改善方法を検討する」はGPUメモリが不足して実行できない)などの違いがあります。)

# 事前準備
事前準備の内容は、L4向けのノートブックと、T4向けのノートブックで異なります。

使うノートブックに合わせて事前準備を行なってください。

## L4向けのノートブックの場合
1. Huggingfaceのアクセストークンの取得
ノートブック内でHugginfaceのアクセストークンを使用します。

https://huggingface.co/settings/tokens

2. Llama3モデルのライセンス
演習ではLlama3を利用する予定です。ライセンス登録など必要な準備を済ませておいてください。

Huggingfaceのアカウントでログインした状態で以下のモデルカードのページにアクセスし、「META LLAMA 3 COMMUNITY LICENSE AGREEMENT」からライセンスへの同意をする。

https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct

## T4向けのノートブックの場合
1. Huggingfaceのアクセストークンの取得
ノートブック内でHugginfaceのアクセストークンを使用します。

https://huggingface.co/settings/tokens

2. Gemma2モデルのライセンス
day1で使用したモデルと同じなので、day1で既にライセンスに同意している方は以下の手順はスキップできます。

Huggingfaceのアカウントでログインした状態で以下のモデルカードのページにアクセスし、「Access Gemma on Hugging Face」からライセンスへの同意をする。

https://huggingface.co/google/gemma-2-2b-jpn-it

# 演習に関連する参考情報

## データを綺麗にするには
- 会話データの場合、文書として書かれたデータよりもデータが扱いにくい場合が多いです。そのため、データをクレンジングすると扱いやすいデータになることが多いです。
- 演習の内容にもある通り、誤字や文の区切りなどを調整する。
- 不要な情報を減らす(生成したい内容や目的に合わせて調整する)。
- 重複した文章の削除する。
- 表現方法の統一する(少し違う言い回しに変えるなどを会話においては行うことがある)。

## データソースを追加するには
- テキスト生成モデルに対してデータソースを使用する場合、データをモデルにプロンプトとして投入する都合により、データを最終的にはテキストデータに変換することになります。
- そのため、PDFやWeb上のHTML等をテキストに変換(パース)する方法についても調べてみましょう。
- PDFやWebなどのデータを取得したり、利用したりする際には、データの提供元の利用規約等を確認し、準拠した上で利用するように習慣を作りましょう。
- PDFの例
- https://pypi.org/project/PyPDF2/
- https://pypi.org/project/pdfminer.six/
- HTMLの例
- https://docs.python.org/ja/3/library/html.parser.html
- SaaSとしてWebデータをLLMが処理しやすくするAPIを提供している企業もあります。
- [https://jina.ai](https://jina.ai/)
- 使用したいWebページのURLをAPIに設定してリクエストを投げると、Webページ上のテキスト等をLLMが処理しやすい形に変換してくれたりします(HTMLのパースをする手間を肩代わりしてくれる)。

## モデルを変えるとどうなるか
- T4版のノートブックでは、ベースモデルとしてgemma2を使っています。
- Llama3よりもパラメータ数が少なく、モデルもLlama3と比べ古いので、生成文は少しぎこちない印象はあります。gemma2ではsystemプロンプトを使えないため、推論のさせ方もLlamaと比べて少し異なっています。
- 埋め込みモデルを変えるという考え方もあります。埋め込み時の結果が変わるので、参考資料としてプロンプトに入ってくる内容が変わることが考えられます。

## 発展的な手法にどのようなものがあるか
- RAGという1つのテーマだけでも様々なアプローチがあります。
- https://github.com/jxzhangjhu/Awesome-LLM-RAG
Loading