はじめに
ある本を読んでいて、ふと思いついたことがあります。日本語の漢字と句読点だけを抽出すれば、LLMに渡すトークンを大きく減らしつつ、それなりの精度でコンテキストを伝えられるのではないか、というアイデアです。
軽い気持ちで試してみたので、残しておこうと思います。
着想の背景
きっかけは、『百冊で耕す<自由に、なる>ための読書術』を読んでいたときのことです。速読に関する章に、こんな一節がありました。
だから、日本語を読み、書けるというのは、それだけで宝くじに当たったような僥倖なのだ。名詞でも動詞でも形容詞でも、いわば大事な「概念」は漢字にしてある。そして、日本語の「情緒」は、送り仮名にある。「てにをは」が日本語の骨法だ。わたしたちの祖先は、じつに便利かつ美しいシステムを開発してくれたのだ。
(近藤康太郎 著 『百冊で耕す 〈自由に、なる〉ための読書術』 第1章 「終わりなき論争 速読の技術/遅読の作法」より)
これを読んで、「この日本語の特性――概念は漢字に集約されている――は、LLMに文章を渡すときのトークン削減にも使えるのでは?」と思いました。もしそうなら、日本語が母国語であることがこのLLMの時代において、まさに"宝くじに当たったようなもの"になるかもしれません。
言語や情報圧縮の分野の研究では、このような考えは昔からあるようです。ただ、LLM関連で同じようなことをやっている例は、ぱっと調べた限りでは見つかりませんでした。というわけでやってみました。
日本語の特性とは
日本語の文章構造には以下のような特徴があります:
- 漢字:名詞、動詞の語幹、形容詞の語幹など、文章の核となる「概念」を表す
- ひらがな:助詞(てにをは)、送り仮名、接続詞など、文法的な役割や情緒を表す
- 句読点:文の区切りや呼吸を示す
例えば、「私は昨日、図書館で本を読んだ。」という文章から漢字と句読点のみを抽出すると、「私昨日、図書館本読。」となります。これだけでも、なんとなく意味は取れます。
実装
まずは、Pythonで漢字と句読点のみを抽出する関数を書いてみました。
import re
def extract_kanji_and_punctuation(text: str) -> str:
"""
日本語テキストから漢字と句読点のみを抽出する
Args:
text (str): 元の日本語テキスト
Returns:
str: 漢字と句読点のみのテキスト
"""
# 漢字の範囲: \u4E00-\u9FFF
# 句読点: 、。!?
pattern = r'[^\u4E00-\u9FFF、。!?]'
extracted = re.sub(pattern, '', text)
return extracted
# 使用例
original_text = """機械学習は、コンピュータがデータから学習し、
明示的にプログラムされることなくタスクを実行する能力を指します。
近年、深層学習の発展により、画像認識や自然言語処理などの
分野で飛躍的な進歩を遂げています。
"""
compressed_text = extract_kanji_and_punctuation(original_text)
print("元の文章:")
print(original_text)
print("\n圧縮後:")
print(compressed_text)
実行結果:
元の文章:
機械学習は、コンピュータがデータから学習し、
明示的にプログラムされることなくタスクを実行する能力を指します。
近年、深層学習の発展により、画像認識や自然言語処理などの
分野で飛躍的な進歩を遂げています。
圧縮後:
機械学習、学習、明示的実行能力指。近年、深層学習発展、画像認識自然言語処理分野飛躍的進歩遂。
検証してみた
実験1:元の内容の推測
まず、漢字と句読点のみに変換した文章をLLM(GPT4.1 api)に渡して、元の内容を推測してもらいました。
プロンプト:
以下は日本語の文章から、漢字と句読点のみを抽出した文字列です。元の文章を推測してください:
機械学習、学習、明示的実行能力指。近年、深層学習発展、画像認識自然言語処理分野飛躍的進歩遂。
結果:
機械学習は、学習や明示的な実行能力を指します。近年、深層学習の発展により、画像認識や自然言語処理の分野で飛躍的な進歩を遂げています。
8割程の意味はあっているかなという印象です。
実験2:複数文章からの適切な選択
次に、3つの文章をそれぞれ漢字と句読点のみに変換し、LLMに質問に対する適切な文章を選んでもらいました。
元の文章
(1)人工知能は、人間の知的活動を模倣することを目的とした情報処理技術であり、自然言語処理や音声認識などの分野で急速に発展している。教育分野では、学習者ごとに最適化された教材を提供するために利用されている。
(2)人工知能は、人間の知的活動を模倣することを目的とした情報処理技術であり、画像認識や行動解析などの分野で急速に発展している。製造業では、機械の故障を事前に検知し、生産効率を高めるために利用されている。
(3)人工知能は、人間の知的活動を模倣することを目的とした情報処理技術であり、推薦システムや対話型システムなどの分野で急速に発展している。流通業では、顧客の購買履歴を分析し、需要予測や在庫管理を最適化するために利用されている。
プロンプト:
以下の3つは日本語の文章から、漢字と句読点のみを抽出した文字列です。このうち、将来的な不具合を事前に予測する人工知能の活用に関して書かれた文章はどれだと予測しますか?理由とともに回答してください。
(1)人工知能、人間知的活動模倣目的情報処理技術、自然言語処理音声認識分野急速発展。教育分野、学習者最適化教材提供利用。
(2)人工知能、人間知的活動模倣目的情報処理技術、画像認識行動解析分野急速発展。製造業、機械故障事前検知、生産効率高利用。
(3)人工知能、人間知的活動模倣目的情報処理技術、推薦対話型分野急速発展。流通業、顧客購買履歴分析、需要予測在庫管理最適化利用。
結果:
将来的な不具合を事前に予測する人工知能の活用に関して書かれた文章は、(2) であると予測します。
理由
(2)の文の中に「機械故障事前検知」というキーワードがあります。
「機械故障」とは、製造業などで発生する不具合やトラブルを指します。
「事前検知」は、不具合などを(実際に起こる前に)あらかじめ察知する、つまり予測することを示します。
このため、「将来的な不具合を事前に予測する」人工知能の活用について説明している文章は(2)です。
LLMは正しく選択肢2を選びました。漢字だけでも、文章のおおまかな主題は判断できるようです。
実験3:トークン数の比較
実験2の元の文章と漢字と句読点抽出後の文字列で、実際にどれくらいトークン数が削減できるのかも測りました。
トークン数
- (1) 元:77 抽出後: 48
- (2) 元:80 抽出後: 50
- (3) 元:88 抽出後: 53
だいたい6.5割になっています。
おわりに
漢字と句読点のみを抽出する方法を試してみたところ、トークン数を約35%削減しながら、LLMに主要な概念を伝えられるという結果になりました。
ちなみに、同様の文章を英語に翻訳してトークン数を計算すると、抽出後と同じような値でした(50token程)。個人的には英語のトークン数>漢字抽出のトークン数 となって、日本語の圧縮率の高さが見えてくることを期待していたので、残念でした。
とはいえ、もっと工夫の余地があると思います。日本語特有の「概念は漢字に集約されている」という特性とLLMを組み合わせれば、なにか面白いことができる気もしています。
ここまで読んでいただき、ありがとうございました。何かの参考になればうれしいです。
参考
- 近藤康太郎『百冊で耕す<自由に、なる>ための読書術』CCCメディアハウス