LLMと略語の同定

この記事はフューチャーAdvent Calendar 2023 16日目の記事です。

前日の15日目は、@garyuu09 さんの「[Combine入門: Publisher, Subscriberについてまとめてみた](https://qiita.com/garyuu09/items/ea3ae0f942b8dd2e52ba)」でした。

## はじめに

こんにちは。TIG[^1]所属の清水です。

2023年はChatGPT[^2]をはじめとした大規模言語モデル(LLM)が一気に身近になった1年であり、
様々な業務でLLMが活用され出しています。  
業務資料の全文検索はAI活用の一例として多くの企業が今後取り入れていくのではないかと思うのですが、業務内のみで使われるような略語に対してもLLMによる検索が充分な精度を発揮できるのか気になり、簡単な検証を行いました。


## LLMの苦手なこと
LLMとは大量の文章データから統計的性質を学習し、言語の構造や文脈・知識を学習した機械学習モデルです。LLMは単語やフレーズの出現確率や関連性を把握することで、質問応答などの高度なタスクに対応することができます。  
LLMの学習は主にインターネット上でアクセスできる情報をもとに行っているため、公開されていない知識やLLM学習後の事象についての知識は持ち合わせません。  


LLMは数々のタスクで素晴らしい推論性能を発揮する一方で、驚くような間違いをすることも知られています。例えば、桁数の大きい計算処理は誤った回答を出力することが多いです。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer 計算問題を間違えるChatGPT（正解は22333333333333333333333333333）
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/4fcc7c03-a984-f961-0352-9bafbdfdd486.png>
@enduml
```


京都大学の湊真一さんの講義[^3]では、数値計算を言語のように文字列の規則性から学習させようとすると組合せ爆発を起こし、非常に複雑な言語モデルが必要になるため、現行の「読み書き」能力のみを獲得したLLMでは正しく計算に対応できないのではないかと分析されていました。

おそらく同様の理由から、ChatGPTは正規表現も間違えることが多いように思います。
短い文字列を扱うタスクには正答できる一方で、同じ単純な抽出条件でも文字列が長くなると抽出元の文字列に無い文字列を回答してしまうようなミスが生じます。

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer 正しく回答できている例
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/07ba1c8b-b45b-32dd-0daf-340da6ce322b.png>
@enduml
```

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer 間違えている例（正しくは'ttt ffffkkk ssoooos oo aaaaaaaaaaaaa')
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/1a4c0f23-c8e5-8596-291f-382a5b47009c.png>
@enduml
```

興味深いことに、ChatGPTは記号表現で書かれた正規表現の解釈までは完璧にできている（＝ルールを自然言語に落とし込むことはできる）にも関わらず、解釈されたルールの適用は難しいようです。  
LLMが得意とする言語を扱うタスクでも、
1. 広く公開されていない知識を必要とする
1. 厳格なルールの適用が求められる

という条件の場合に期待されるような精度が発揮できない可能性がありそうです。  

## LLMと語の同定
今回の記事の本題は略語を含む文章におけるLLMの精度検証です。  
「フューチャー決済システム」というタッチ決済アプリケーションについてのミーティングメモを想定し、以下の文章に対してLLMに推論を行ってもらいます。今回使用したLLMはGPT-3.5[^4]です。（こちらの会議メモはChatGPTの出力を参考に作成しました）

> F決のリリース時期について、どのように進めるか？
> 今日の会議で大まかに決めたい。再来年12月の方針で決定
> PD・PG時のメンバー追加について。5人追加する予定だが新しいメンバーのキャッチアップが必要。
> ポ管と履管の資料が未整備なので、確認する。
> f決のリリース時には、ポイント管理は実装しない方針。決済管理はリリース時に実装するか要検討。
> 済理で現行システムから変更したい箇所について調査する。
> 次回ミーティングまでの作業：F決の今後のスケジュールに関する資料をまとめる。

上記文章では以下のような略語の使用を想定しました。
`フューチャー決済システム`→`F決, f決`
`ポイント管理システム`→`ポイント管理, ポ菅`
`決済履歴管理システム`→`決済管理, 済理, 履管`

略語の作成については[漢字を中心とした複合語の略語の自動生成][^5]の例を参考に、語の中で出現する文字の順序を変えずに各形態素から数文字とる形で行いました。
人間の感覚では元の単語を知っていればメモ中の略語もおおよそ理解できるかと思うのですがいかがでしょうか？  

## 検証

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer 省略語と使用した文章
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/75ef0fcd-9352-0f2e-7a62-8e05ef1546f0.png>
@enduml
```
上記文章に対して、ChatGPTに`以下メモについて、xxxについて述べた箇所を抽出してください。`という形式で`フューチャー決済システム`、`ユーザーポイント管理システム`、`決済履歴管理システム`についてそれぞれタスクを与えたところ、ChatGPTが抽出した文章それぞれは以下の通りでした。

**フューチャー決済システム**
`f決のリリース時には、ポイント管理は実装しない方針。決済管理はリリース時に実装するか要検討。`  
`次回ミーティングまでの作業：F決の今後のスケジュールに関する資料をまとめる。`  
**ポイント管理システム**
`f決のリリース時には、ポイント管理は実装しない方針。決済管理はリリース時に実装するか要検討。`  
**決済履歴管理システム**
`f決のリリース時には、ポイント管理は実装しない方針。決済管理はリリース時に実装するか要検討。`

※プロンプト画面全文のスクリーンショットは記事の終わりにあります。

`フューチャー決済システム`については冒頭の`F決のリリース時期について、どのように進めるか？`という一文が抜けているものの、F決=フューチャー決済システムということを概ね推論できている一方で、`ユーザーポイント管理システム`、`決済履歴管理システム`に対する`ポ菅`や`済理, 履管`などの略称は理解できていないように見えます。  
`フューチャー決済システム`→`F決`の省略はなぜうまくいったのでしょうか？  
![スクリーンショット 2023-12-16 19.38.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/1479f9f9-31f0-5f4d-193f-a1fe1e1e1397.png)
ChatGPTに上記のように略称を考えてもらったところ、複合語の冒頭1文字をとった頭字語を作成する傾向が見られました。管理システムがManagement Systemの頭文字をとってMSとなっているのに対し、決済システムはPayment SystemのPSとならないことから法則性を理解して略語の概念を理解している訳ではなさそうです[^6]。  


## とりあえずの結論
少なくとも現行のChatGPTでは、業務で使うような一般的でない省略語の検出には課題がありそうです。  
ユーザが省略語の辞書を作成してLLMと共有する、というのは一つの解決策ですが、作成コストや辞書メンテナンスのコストの問題があります。
人間のように未知の省略語についても、ルールを基に類推できるような仕組みをLLMに持せることができればより豊かな情報検索ができるようになるかと思うので、これからのLLM活用の課題として自分も取り組んでいきたいです。

## おわりに

本記事は業務内のみで使われるような略語に対するLLMの性能への疑問から、簡単な検証を行いました。生成AIがどのように推論しているのかについては未知の部分が多く、日々利用する中で生じる小さな疑問を見逃さずに検証し続けることが重要だと感じました。  
今回はできませんでしたが、今後はLLMとルールベースモデルを組み合わせる方法についても模索していきたいです。

明日は@RuyPKGさんによる記事です。

[^1]:[Technology Innovation Group](https://open.talentio.com/r/1/c/future/pages/50253)
[^2]:[ChatGPT](https://chat.openai.com)
[^3]:[ChatGPTはなぜ計算が苦手なのか](https://edx.nii.ac.jp/lecture/20230707-03)
[^4]:[GPT-3.5](https://platform.openai.com/docs/models/gpt-3-5)
[^5]:[漢字を中心とした複合語の略語の自動生成](https://www.anlp.jp/proceedings/annual_meeting/2008/pdf_dir/C4-4.pdf)
[^6]:Google検索で管理システムは28,100,000件ほどヒットするのに対し、決済システムはその13%ほどの3,590,000件ほどしかヒットしない



<details><summary>検証内容画像</summary><div>

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer フューチャー決済システムに関する情報の抽出
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/9c243bc8-d323-35dc-bcc3-76be8b540708.png>
@enduml
```

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer ユーザーポイント管理システムに関する情報の抽出
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/3ac33230-b5ff-ab86-40e5-39e436348edb.png>
@enduml
```

```plantuml
@startuml
<style>
root {
  Padding 0
  Margin 0
}
footer {
  FontColor black
  FontSize 17
}
</style>
footer 決済履歴管理システムに関する情報の抽出
title <img:https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3621040/ed44b6dd-15f2-62b1-bd39-2e295017afed.png>
@enduml
```

</div></details>