Slide 1

Slide 1 text

情報収集を効率化する自然言語処理の活用方法 ~ Python ではじめる Awesome リポジトリの作り方 ~ PyCon APAC 2023 池田 大志

Slide 2

Slide 2 text

自己紹介 ● 名前 ○ 池田 大志(Taishi Ikeda) ● 略歴 ○ 2015 - 2017: 奈良先端大 自然言語処理学研究室 ○ 2017 - 2022: 株式会社 NTTドコモ ○ 2023 - 現在 : 企業にて自然言語処理の研究開発に従事 ● 個人開発者としての取り組み ○ 自然言語処理に関連する Awesome リポジトリの開発 ○ 単語分割/品詞タグ付けライブラリ nagisa の開発 ○ PyCon JP 2018, 2019, 2020, 2022 の発表 2

Slide 3

Slide 3 text

3 本発表の内容 ● GitHub API からデータを取得し、そのデータを自然言語処理で 加工することで、Awesome リポジトリを作る方法を説明する 自然言語処理 GitHub API Awesome リポジトリ スタート ゴール

Slide 4

Slide 4 text

4 本発表の目的 ● Awesome リポジトリの作り方を通じて、大規模言語モデルの 活用方法と、効率的な情報収集の方法を共有することが目的 Awesome リポジトリ GitHub API 自然言語処理 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 5

Slide 5 text

目次(1/3) ● 情報収集の現状 ○ エンジニアが情報収集を行う頻度 ○ 情報過多による開発パフォーマンスへの影響 ○ 課題の整理、解決案の提案 ○ 実例:日本語NLPに関する Awesome リポジトリ ○ 実例:ChatGPTに関する Awesome リポジトリ ○ Awesome リポジトリとは? 5

Slide 6

Slide 6 text

目次(2/3) ● 自然言語処理を活用した情報収集の効率化 ○ ① GitHub API を活用したデータ収集 ○ ② 必要な情報を見つけ出すテキスト分類 ■ 大規模言語モデルを利用した Few-Shot 分類 ■ 学習データを利用した事前学習モデルのファインチューニング ■ 大規模言語モデルでテキスト分類する方法 ■ OpenAI API を利用したテキスト分類 ■ Hugging Face に公開されているモデルの利用 ■ テキスト分類の精度検証 ○ ③ わかりやすく情報を伝える多言語機械翻訳 ■ OpenAI API を利用した多言語機械翻訳 ○ (参考)効率的に情報を探し出す検索・質問応答 6

Slide 7

Slide 7 text

目次(3/3) ● 情報が自動的に集約される Awesome リポジトリの作り方 ○ ④ Awesome リポジトリの作り方 ■ ユーザーに価値のある情報の追加 ○ ⑤ 情報掲載作業の自動化 ○ Awesome リポジトリの完成 ● まとめ ○ 大規模言語モデル時代の情報収集 7

Slide 8

Slide 8 text

情報収集の現状

Slide 9

Slide 9 text

エンジニアが情報収集を行う頻度 ● アンケート回答者の 30.4% が「1日に1~2回程度、3回以上」 ○ リクルート社によるプレスリリース(2015/7/9)より引用 9

Slide 10

Slide 10 text

情報過多による開発パフォーマンスへの影響 ● 情報過多時代におけるリモートワークに関する実態調査 ○ OpenText 社によるプレスリリース(2021/1/19)より引用 ● 業務に必要な情報の検索にかかる時間について、 5人に1人以上(27.9%)が「1~5分かかっている」と回答 ● 「情報過多」に対する課題が、日本のオフィスワーカーの 生産性とストレスレベルに影響を与えているという現状 ○ 日本は欧州やカナダに比べ3倍以上の結果に 10

Slide 11

Slide 11 text

11 課題の整理、解決案の提案 ● 課題の整理 ○ 1日に何度も情報収集を行い、蓄積された情報を見つけるのに 時間を要しており、これが生産性に影響を及ぼしている ○ 情報を収集する行為が悪いわけではなく、 その情報を効率的に収集し、正しく整理することが必要だと考える ● 解決案の提案 ○ 情報が自動的に集約される Awesome リポジトリを作ることを 提案する ● メリット ○ Awesome リポジトリを作成し公開することで、 自分だけではなく他の人の情報収集の効率化にも役に立つ

Slide 12

Slide 12 text

12 実例:日本語NLPに関する Awesome リポジトリ ● 515件のリポジトリ情報を掲載 ○ https://github.com/taishi-i/awesome-japanese-nlp-resources

Slide 13

Slide 13 text

13 実例:ChatGPTに関する Awesome リポジトリ ● 1149件のリポジトリ情報を掲載 ○ https://github.com/taishi-i/awesome-ChatGPT-repositories

Slide 14

Slide 14 text

Awesome リポジトリとは? ● ソフトウェアやリソースをまとめた GitHub リポジトリのこと ○ 特定の技術領域の有用な情報のリンクを集め、 開発者や関心を持つ人々に価値のあるリソースを提供するもの 14

Slide 15

Slide 15 text

自然言語処理を活用した 情報収集の効率化

Slide 16

Slide 16 text

16 ① GitHub API を活用したデータ取得 ● リポジトリ情報を検索する API を活用し、データを取得する Awesome リポジトリ GitHub API 自然言語処理 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 17

Slide 17 text

17 ① GitHub API を活用したデータ取得 ● リポジトリ情報を検索する API を活用し、データを取得する Awesome リポジトリ 自然言語処理 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化 GitHub API 元データ (JSON) ① データ 取得 全処理(①〜⑤)を Python で自動化

Slide 18

Slide 18 text

18 ① GitHub API を活用したデータ取得 ● GitHub リポジトリを取得する Python コード ○ リクエスト先: https://api.github.com/search/repositories import json import requests query = "chatgpt" params = {"q": query, "sort": "stars", "order": "desc", "per_page": 100} URL = "https://api.github.com/search/repositories" response = requests.get(URL, params=params) data = json.loads(response.text)

Slide 19

Slide 19 text

19 ① GitHub API を活用したデータ取得 ● GitHub リポジトリを取得する Python コード ○ リクエスト先: https://api.github.com/search/repositories import json import requests query = "chatgpt" params = {"q": query, "sort": "stars", "order": "desc", "per_page": 100} URL = "https://api.github.com/search/repositories" response = requests.get(URL, params=params) data = json.loads(response.text) ライブラリのインポート

Slide 20

Slide 20 text

20 ① GitHub API を活用したデータ取得 ● GitHub リポジトリを取得する Python コード ○ リクエスト先: https://api.github.com/search/repositories import json import requests query = "chatgpt" params = {"q": query, "sort": "stars", "order": "desc", "per_page": 100} URL = "https://api.github.com/search/repositories" response = requests.get(URL, params=params) data = json.loads(response.text) 検索キーワードの設定

Slide 21

Slide 21 text

21 ① GitHub API を活用したデータ取得 ● GitHub リポジトリを取得する Python コード ○ リクエスト先: https://api.github.com/search/repositories import json import requests query = "chatgpt" params = {"q": query, "sort": "stars", "order": "desc", "per_page": 100} URL = "https://api.github.com/search/repositories" response = requests.get(URL, params=params) data = json.loads(response.text) リクエストの送信

Slide 22

Slide 22 text

22 ① GitHub API を活用したデータ取得 ● GitHub リポジトリを取得する Python コード ○ リクエスト先: https://api.github.com/search/repositories import json import requests query = "chatgpt" params = {"q": query, "sort": "stars", "order": "desc", "per_page": 100} URL = "https://api.github.com/search/repositories" response = requests.get(URL, params=params) data = json.loads(response.text) JSON に変換

Slide 23

Slide 23 text

23 ① GitHub API を活用したデータ取得 ● 実際に取得したリポジトリ情報 ○ f/awesome-chatgpt-prompts のリポジトリ情報 { "full_name": "f/awesome-chatgpt-prompts", "description": "This repo includes ChatGPT prompt curation to use ChatGPT better.", "stargazers_count": 90892, "forks_count": 12362, "language": "HTML", "license": { "key": "cc0-1.0", "name": "Creative Commons Zero v1.0 Universal" } }

Slide 24

Slide 24 text

24 ② 必要な情報を見つけ出すテキスト分類 ● データから必要な情報を抽出する処理 Awesome リポジトリ GitHub API 自然言語処理 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 25

Slide 25 text

25 ② 必要な情報を見つけ出すテキスト分類 ● データから必要な情報を抽出する処理 Awesome リポジトリ GitHub API ① データ 取得 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化 自然言語処理 元データ (JSON) 分類済み データ ② テキスト 分類 全処理(①〜⑤)を Python で自動化

Slide 26

Slide 26 text

● 具体的なテキスト分類手段 ○ 大規模言語モデルを利用した Few-Shot 分類 ○ 学習データを利用した事前学習モデルのファインチューニング ● 例えば「日本語NLPに関する情報」を分類する事例 ○ 該当する場合は「Yes」、該当しない場合は「No」を付与 26 入力テキスト(リポジトリの description) ● alpacaデータセットを日本語化したものです ● 『プログラマーのための CPU入門』正誤情報 ● DXライブラリを用いて作成したオセロゲームです。 ② 必要な情報を見つけ出すテキスト分類 出力ラベル ● Yes ● No ● No テキスト 分類

Slide 27

Slide 27 text

大規模言語モデルを利用した Few-Shot 分類 ● OpenAI API を利用する ○ メリット:簡単に大規模言語モデルを利用できる ○ デメリット: API 利用の費用が必要となる ○ おすすめモデル:gpt3.5-turbo, gpt-4 ● Hugging Face に公開されているモデルを利用する ○ メリット:一度ダウンロードすると費用なしに検証可能 ○ デメリット:GPU リソースが必要 ○ おすすめモデル: Instruction tuning 済み Llama2 系のモデル ■ 日本語: elyza/ELYZA-japanese-Llama-2-7b-instruct ■ 英語: meta-llama/Llama-2-13b-hf 27

Slide 28

Slide 28 text

学習データを利用した事前学習モデルの ファインチューニング ● Hugging Face に公開されているモデルを利用する ○ メリット:CPU でも動作する実用的なモデルを構築できる ○ デメリット:学習データを作成する必要がある ○ おすすめモデル:ダウンロード数の多い BERT 系のモデル ■ 日本語: cl-tohoku/bert-base-japanese-whole-word-masking ■ 英語: bert-base-uncased 28

Slide 29

Slide 29 text

29 大規模言語モデルでテキスト分類する方法 ● 少数のサンプルを提示することで、分類したい事例を予測する ### Question: Is this description relevant to Japanese natural language processing? Please answer Yes or No. ### Description: (End of life: May 31, 2023) AWS Toolkit for Eclipse ### Answer: No ### Question: Is this description relevant to Japanese natural language processing? Please answer Yes or No. ### Description: Japanese analyzer uses kuromoji japanese tokenizer for ElasticSearch ### Answer: Yes ### Question: Is this description relevant to Japanese natural language processing? Please answer Yes or No. ### Description: Proposal and Evaluation of Japanese Toxicity Schema" provides a schema and dataset for toxicity in the Japanese language ### Answer:

Slide 30

Slide 30 text

30 大規模言語モデルでテキスト分類する方法 ● 少数のサンプルを提示することで、分類したい事例を予測する ### Question: Is this description relevant to Japanese natural language processing? Please answer Yes or No. ### Description: (End of life: May 31, 2023) AWS Toolkit for Eclipse ### Answer: No 負例( No の場合)

Slide 31

Slide 31 text

31 大規模言語モデルでテキスト分類する方法 ● 少数のサンプルを提示することで、分類したい事例を予測する ### Question: Is this description relevant to Japanese natural language processing? Please answer Yes or No. ### Description: Japanese analyzer uses kuromoji japanese tokenizer for ElasticSearch ### Answer: Yes 正例( Yes の場合)

Slide 32

Slide 32 text

32 大規模言語モデルでテキスト分類する方法 ● 少数のサンプルを提示することで、分類したい事例を予測する ### Question: Is this description relevant to Japanese natural language processing? Please answer Yes or No. ### Description: Proposal and Evaluation of Japanese Toxicity Schema" provides a schema and dataset for toxicity in the Japanese language ### Answer: 分類したい事例 大規模言語モデルで 次の単語を予測する 「Yes」または「No」を予測する

Slide 33

Slide 33 text

33 大規模言語モデルでテキスト分類する方法 ● Python 変数で定義したプロンプト prompt = """### Question:\nIs this description relevant to Japanese natural language processing? Please answer Yes or No.\n\n### Description:\nThe Symfony PHP framework\n\n### Answer:\nNo\n\n### Question:\nIs this description relevant to Japanese natural language processing? Please answer Yes or No.\n\n### Description:\nGLUE: Japanese General Language Understanding Evaluation\n\n### Answer:\nYes\n\n### Question:\nIs this description relevant to Japanese natural language processing? Please answer Yes or No.\n\n### Description:\nProposal and Evaluation of Japanese Toxicity Schema" provides a schema and dataset for toxicity in the Japanese language\n\n### Answer:\n"""

Slide 34

Slide 34 text

34 OpenAI API を利用したテキスト分類 ● OpenAI 公式 Python ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" prompt = """ """ messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create( model=model, messages=messages, ) print(completion["choices"][0]["message"]["content"])

Slide 35

Slide 35 text

35 OpenAI API を利用したテキスト分類 ● OpenAI 公式 Python ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" prompt = """ """ messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create( model=model, messages=messages, ) print(completion["choices"][0]["message"]["content"]) ライブラリのインポート

Slide 36

Slide 36 text

36 OpenAI API を利用したテキスト分類 ● OpenAI 公式 Python ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" prompt = """ """ messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create( model=model, messages=messages, ) print(completion["choices"][0]["message"]["content"]) モデルの指定

Slide 37

Slide 37 text

37 OpenAI API を利用したテキスト分類 ● OpenAI 公式 Python ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" prompt = """ """ messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create( model=model, messages=messages, ) print(completion["choices"][0]["message"]["content"]) プロンプトの指定

Slide 38

Slide 38 text

38 OpenAI API を利用したテキスト分類 ● OpenAI 公式 Python ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" prompt = """ """ messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create( model=model, messages=messages, ) print(completion["choices"][0]["message"]["content"]) リクエストの送信

Slide 39

Slide 39 text

39 OpenAI API を利用したテキスト分類 ● OpenAI 公式 Python ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" prompt = """ """ messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create( model=model, messages=messages, ) print(completion["choices"][0]["message"]["content"]) 結果の出力 YES と出力

Slide 40

Slide 40 text

40 Hugging Face に公開されているモデルの利用 ● Hugging Face ライブラリを利用する例 ○ プロンプトを入力し、モデルの出力結果を得るプログラム import torch from transformers import AutoModelForCausalLM, AutoTokenizer model_name = "elyza/ELYZA-japanese-Llama-2-7b-instruct" model = AutoModelForCausalLM.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) prompt = """ """ inputs = tokenizer(prompt, return_tensors="pt").to(model.device) output = tokenizer.decode(inputs["input_ids"][0], skip_special_tokens=False) with torch.no_grad(): tokens = model.generate(**inputs) output = tokenizer.decode(tokens[0], skip_special_tokens=False) print(output)

Slide 41

Slide 41 text

41 テキスト分類の精度検証 ● 大規模言語モデルを利用した Few-Shot 分類では、 たった2件の事例を与えるだけも非常に高い分類性能を実現 ○ 「日本語NLPに関する情報」を分類する検証 ○ GPT4 では、約2500件を学習した BERT モデルに匹敵する性能 大規模言語モデル( LLM)で独自データセットを評価する https://zenn.dev/taishii/articles/235769248e6046

Slide 42

Slide 42 text

42 ③ わかりやすく情報を伝える多言語機械翻訳 ● テキストを様々な言語に翻訳する処理 Awesome リポジトリ GitHub API 自然言語処理 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 43

Slide 43 text

43 ③ わかりやすく情報を伝える多言語機械翻訳 ● テキストを様々な言語に翻訳する処理 Awesome リポジトリ GitHub API 元データ (JSON) ① データ 取得 ② テキスト 分類 マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化 自然言語処理 分類済み データ ③ 翻訳 翻訳済み データ 全処理(①〜⑤)を Python で自動化

Slide 44

Slide 44 text

● メリット ○ 言語に依存せず、最新の情報を入手することができる ○ 多くのユーザーに情報を届けることができる ● 具体的な機械翻訳の手段 ○ OpenAI API を利用する ○ Hugging Face に公開されている翻訳モデルを利用する 英語: Comparison of Japanese Sentence Segmentation Tools 44 ③ わかりやすく情報を伝える多言語機械翻訳 日本語: 日本語の文分割ツールの比較 繁体字中国語: 日本句子分割工具比較 簡体字中国語: 日本语句子分割工具比较 翻訳 入力テキスト 出力テキスト

Slide 45

Slide 45 text

45 OpenAI API を利用した多言語機械翻訳 ● プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" target_lang = "Japanese" input_text = "Comparison of Japanese Sentence Segmentation Tools" prompt = ( "Please translate the following input text into" f" {target_lang}.\n\nInput text: {input_text}" ) messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create(model=model, messages=messages) print(completion["choices"][0]["message"]["content"])

Slide 46

Slide 46 text

46 OpenAI API を利用した多言語機械翻訳 ● プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" target_lang = "Japanese" input_text = "Comparison of Japanese Sentence Segmentation Tools" prompt = ( "Please translate the following input text into" f" {target_lang}.\n\nInput text: {input_text}" ) messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create(model=model, messages=messages) print(completion["choices"][0]["message"]["content"]) ライブラリのインポート

Slide 47

Slide 47 text

47 OpenAI API を利用した多言語機械翻訳 ● プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" target_lang = "Japanese" input_text = "Comparison of Japanese Sentence Segmentation Tools" prompt = ( "Please translate the following input text into" f" {target_lang}.\n\nInput text: {input_text}" ) messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create(model=model, messages=messages) print(completion["choices"][0]["message"]["content"]) モデルの指定

Slide 48

Slide 48 text

48 OpenAI API を利用した多言語機械翻訳 ● プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" target_lang = "Japanese" input_text = "Comparison of Japanese Sentence Segmentation Tools" prompt = ( "Please translate the following input text into" f" {target_lang}.\n\nInput text: {input_text}" ) messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create(model=model, messages=messages) print(completion["choices"][0]["message"]["content"]) プロンプトの指定

Slide 49

Slide 49 text

49 OpenAI API を利用した多言語機械翻訳 ● プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" target_lang = "Japanese" input_text = "Comparison of Japanese Sentence Segmentation Tools" prompt = ( "Please translate the following input text into" f" {target_lang}.\n\nInput text: {input_text}" ) messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create(model=model, messages=messages) print(completion["choices"][0]["message"]["content"]) リクエストの送信

Slide 50

Slide 50 text

50 OpenAI API を利用した多言語機械翻訳 ● プロンプトを入力し、モデルの出力結果を得るプログラム import openai model = "gpt-3.5-turbo" target_lang = "Japanese" input_text = "Comparison of Japanese Sentence Segmentation Tools" prompt = ( "Please translate the following input text into" f" {target_lang}.\n\nInput text: {input_text}" ) messages = [{"role": "system", "content": prompt}] completion = openai.ChatCompletion.create(model=model, messages=messages) print(completion["choices"][0]["message"]["content"]) 結果の出力 日本語の文分割ツールの比較 と出力

Slide 51

Slide 51 text

51 (参考)効率的に情報を探し出す検索・質問応答 ● 収集した情報をキーワードや自然文で検索する処理 Awesome リポジトリ GitHub API 自然言語処理 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 52

Slide 52 text

52 (参考)効率的に情報を探し出す検索・質問応答 ● 収集した情報をキーワードや自然文で検索する処理 Awesome リポジトリ GitHub API 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ ④ 統計データ付与 ⑤ GitHub にアップロード 全処理(①〜⑤)を Python で自動化 自然言語処理 マークダウンファイル (READEM.md) (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 53

Slide 53 text

53 (参考)効率的に情報を探し出す検索・質問応答 ● 具体的な検索・質問応答の手段 ○ 大規模言語モデルベース ■ LangChain, LlamaIndex, haystack を利用する ○ キーワード・ベクトル検索ベース ■ Pyserini を利用する マークダウンファイル (READEM.md) ● インデックスファイル ● ベクトルファイル LangChain LlamaIndex haystack Pyserini 変換 自然文: 日本語の文分割ツールを教えて。 キーワード: 日本語, 文分割 変換 質問・キーワード 出力 Bunkai sengiri 検索結果

Slide 54

Slide 54 text

情報が自動的に集約される Awesome リポジトリの作り方

Slide 55

Slide 55 text

55 ④ Awesome リポジトリの作り方 ● 分類・翻訳済みデータを加工し、README.md を作成する Awesome リポジトリ GitHub API 自然言語処理 元データ (JSON) ① データ 取得 分類済み データ ② テキスト 分類 ③ 翻訳 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード (検索・質問応答) 全処理(①〜⑤)を Python で自動化

Slide 56

Slide 56 text

56 ④ Awesome リポジトリの作り方 ● 分類・翻訳済みデータを加工し、README.md を作成する GitHub API 自然言語処理 元データ (JSON) ① データ 取得 ② テキスト 分類 ③ 翻訳 (検索・質問応答) Awesome リポジトリ 分類済み データ 翻訳済み データ マークダウンファイル (READEM.md) ④ 統計データ付与 ⑤ GitHub にアップロード 全処理(①〜⑤)を Python で自動化

Slide 57

Slide 57 text

57 ④ Awesome リポジトリの作り方 ● 分類・翻訳済みデータを加工し、README.md を作成する ○ 「 * [リポジトリ名](URL) - 説明文」 の形式 ### Morphology analysis * [sudachi.rs](https://github.com/WorksApplications/sudachi.rs) - SudachiPy 0.6* and above are developed as Sudachi.rs. * [Janome](https://github.com/mocobeta/janome) - Japanese morphological analysis engine written in pure Python |Name|downloads/week|total downloads|stars| -|-|-|- |[SudachiPy](https://github.com/WorksApplications/SudachiPy)|[![Downloads](https://static.pepy .tech/badge/sudachipy/week)](https://pepy.tech/project/sudachipy)|[![Downloads](https://static.p epy.tech/badge/sudachipy)](https://pepy.tech/project/sudachipy)|![GitHub Repo stars](https://img.shields.io/github/stars/WorksApplications/SudachiPy?style=social)| |[Janome](https://github.com/mocobeta/janome)|[![Downloads](https://static.pepy.tech/badge/ja nome/week)](https://pepy.tech/project/janome)|[![Downloads](https://static.pepy.tech/badge/jano me)](https://pepy.tech/project/janome)|![GitHub Repo stars](https://img.shields.io/github/stars/mocobeta/janome?style=social)|

Slide 58

Slide 58 text

ユーザーに価値のある情報の追加 ● 統計情報の掲載 ○ 情報を比較し、どのリポジトリを選択すべきかヒントを提供する ● 情報の多言語化 ○ その情報を必要としている人は、世界中にいる ● JSON ファイルの提供 ○ 構造化されたファイルを提供することで、 情報の二次利用を促すことができる 58

Slide 59

Slide 59 text

⑤ 情報掲載作業の自動化 ● 人手の処理は行わない ○ 定期処理(crontab など)を設定し、各処理を自動的しておく ○ Python ライブラリを利用し、GitHub に Push する ● README.md を直接編集しない ○ Python スクリプトで README.md を作成する ● 定期的な情報掲載を行う ○ 自分のためにも、ユーザーのためにもなる 59

Slide 60

Slide 60 text

60 Awesome リポジトリの完成 ● 各処理を実行することで、集約される情報の例

Slide 61

Slide 61 text

まとめ

Slide 62

Slide 62 text

大規模言語モデル時代の情報収集 ● 毎日のように新しい情報が出現する状況は変わらない ○ しかし、大規模言語モデルを活用することで、 効率的に情報を収集することが可能となった ○ さらに、プロンプト(自然文)でモデルを操作できるため、 自然言語処理を簡単に活用できるようになった ○ なので、Awesome リポジトリを作り、GitHub に公開しよう ● 結局、どの大規模言語モデルを利用すべきか? ○ まずは OpenAI API で、タスクの実現性を検討することがおすすめ ■ インターネット上の情報が豊富である ■ LangChain, LlamaIndex などのライブラリとの連携が容易 ■ 初期費用なし、低コスト(gpt-3.5-turbo の場合) ○ 実現性を検証後、Hugging Face 上のモデル でも同様のタスクを検証する 62