Scrapboxのリンクをサジェスト
言葉のデータがたくさんある、これの活用をコンピュータによって支援したい
今よく知られている方法としては検索とレコメンドがある、提案手法はこのいいとこどりのようなもの
検索は、人間が短い「検索キーワード」を入力して、そのキーワードを含む文書が指し示されるシステム
人間が「検索キーワード」を考えなければならない
提案システムは長い文章を入力にできる。この長い入力の部分部分が「検索キーワード」になる。
既存の検索システムで無理やり実現しようとすると、長い文書を細かく刻んで何度も繰り返し検索することになるが、これは時間がかかる。ここに技術的な工夫をして現実的な時間で動くようにした。例えば6500ページある僕のScrapboxに対して、10000文字の入力で検索しても1秒かからない。
検索のためだけにキーワードを作る必要はない。「書きかけの文章を入力して、関連した記事を見つける」などの使い方ができる。
レコメンドとの関係。
レコメンドは、例えば記事の末尾に「関連記事」として他の記事が表示されているのをイメージすると良い。
あれは「長い記事」を入力として「関係ありそうな他の記事」を指し示すシステムだ。
ただ、既存のシステムでは「関連がある記事」を示すことはするが「どう関係があるのか」を示すことはあまり行われていない。そのため、システムが「関係ある」と指し示した記事が、具体的にはどういう関係なのか、を人間は知ることができない。
提案システムでは「どういうフレーズが共通か」を示すことができる。「この文書のこのフレーズがあの文章にも入っているから、関連があると思います」っていう見せ方をする。
既存のレコメンドシステムでも似たことはできる。単語の頻度ベースの方法なら「この単語が共通です」と表示することができる。
しかし、フレーズではなく単語の場合、しばしば人間が意味を理解できない。例えば「本部長会」は「本/部長/会」と刻まれてしまう。「この記事とは部長って単語が共通です」と表示されても情報が減りすぎて理解が難しい。
提案システムは単語ではなくフレーズ(複数単語の列)で共通部分を提示する。
このシステムの出力に、既存のシステムで最も似ているのはScrapboxのリンク先ページ表示だ。Scrapboxは、人間が明示的にフレーズをブラケットで囲い(ブラケティング)、そのフレーズが共通して出現する文書が「リンクで繋がった」としてページ末に表示される。
Scrapboxの方法はあらかじめ人間がたくさんの文書をブラケティングしておく必要がある。提案システムはブラケティングされてない文書の山に対してScrapbox的なリンクを発生させる手法と言える。
細かなアピールポイント
1ツイート程度の長さであればミリ秒オーダーで結果が帰る。爆速。
検索しようと能動的に思いつく必要がない、文書を書くツールと統合すれば、書きかけの文章を作りつつある時に、その内容を使ってレコメンドができる。文章を執筆している最中に心のモードを「検索キーワードを考える」に切り替えることなく、膨大な文書のストックの中からフレーズが共通するものを見つけられる。
曖昧検索。動詞の活用や助詞の有無、英字の大文字小文字などを無視して検索するため、表記揺れの吸収ができる。例えば「情報共有」と「情報の共有」と「情報を共有する」と「情報が共有される」は全て相互に検索ヒットする。
----- old
https://gyazo.com/74fc2630ca4191cb6327b7c5c4dae1e3
編集のたびに僕のScrapboxの全6500ページから曖昧検索して、入力した文章と共通のキーフレーズを持っているページを提示する仕組み
https://gyazo.com/d68155570764c1439288c9021c57dc4a
曖昧に検索
https://gyazo.com/48cdb3505c123a4abc14aa2840a0b208
https://gyazo.com/88b3e9528035d928ef0909d6a146d01d
よくある「関連記事のレコメンド」と大きく違う点は、「関連」に人間が理解できるラベルが付いている点。これはScrapboxの思想にかなり共感している。名前のない関連だと、たとえば上の例だと「確率の積分」に関連があるって表示が「なんで?」となってしまう。この方式だと「DXが共通」と表示されてるので「そのdxは積分の記号だ笑」と理解できる。