エンジニア友達からast-grepというツールを教えてもらった。
https://github.com/ast-grep/ast-grep
名前の通り、構文木的なgrepがコードに対して出来るという優れもので、大規模コードの検索やリファクタリングのチェックで大活躍しそうだ。
利用されているツール例の中にcodeRabbitが入っていて、確かにRAGのユースケースでもこのツールは凄く便利そうだと納得した。同時にこの仕組みはNLPに対しても適用出来そうだと思った。
自然言語の構文木化は難しいが深層学習ベースで結構な高精度化が実現しているタスクでもある。Dependency ParsingタスクやConstituency Parsingタスクのattach-juxtapose-parserなどで解かれている。
https://github.com/princeton-vl/attach-juxtapose-parser
リアルタイム解析だと、ニューラルネットワークの処理時間の問題で現実的ではなくともRAGのRetrievalの前処理としては十分許容できる処理時間。文章サイズが大きすぎないユースケースでは転置インデックスでなくgrepベースでも全然検索できそうな事を考えると、例えば"犬が, (何でも良い), ている" が含まれる文でも該当部分を探すことも可能なはずだ。これはベクトル検索の曖昧性やtf-idfのランキング特性を考慮するとなかなか探しにくいクエリに見える。特に主語と目的語の関係や主語と動詞の能動・受動関係を絶対に間違えないことはRAGのtop件数が少ない特性から見ても相性が良さそうな感じがする。
これは良いアイデアなんじゃないか!と思ったが、同時にそのアイデアの筋の良さが今の自分では判断できないと思った。
良いアイデアだと思っていたもので、ググって類似例が出ない場合
本当にブルーオーシャン
webに残ってないがどこかで進行中
調べ方が悪い
筋が悪い
のどれかだと思っているが、3,4番を高精度に判定するためには自分自身が高いドメイン知識や高性能な枝刈り性能を持っている必要がある。
ここの能力が現状ない上に、半年ほど論文を全く読んでいないのでドメイン知識も薄れて来ているのを実感する。せめてドメイン知識を身につけるために専門的なインプットを増やす。可能であれば、思考とアクションを通して枝刈り性能も高めたい。結局数なんだろうなと思った。
やっぱり指導教員は凄かったんだなとしみじみ感じる。