『磯田道史と日本史を語ろう 達人たちと語る歴史の秘密』(磯田 道史著、文春新書、2024年1月20日)

日本の歴史の中で一番の革命児・稀有なリーダーは織田信長であるということは専門家の一致する見解のようだ。あと源頼朝の評価が高いのが割と予想外。

本書のリーダー論はなかなか面白い。しかし、幕末の新選組剣客や龍馬暗殺者の議論など、あまり面白いとも思えない。

 

『暴力とポピュリズムのアメリカ史 ミリシアがもたらす分断』(中野 博文著、岩波新書、2024年1月19日発行)

アメリカという国は、建国前から暴動や戦争が多発している国という印象を受ける。市民による自治あるいは自衛のために基本になっているミリシアという仕組みができたが、ミリシア連邦政府に対抗する手段としても認められていた。しかし、対外戦争(イギリス、メキシコ、スペインなど)や、第一次、第二次世界大戦を通じて連邦政府の軍事組織に組み込まれていったということのようだ。

ミリシアの組成に、人種差別に対する州ごとの違いが大きな影響を与えているなど、アメリカという国の問題が浮き彫りになっている。

しかし、本書は文章が全体として少しわかりにくいと思う。

『検索と発見のためのデザイン』(Peter Morville他著、オライリー・ジャパン、2010年11月26日初版発行)

質問ー検索ーフィルタリングーブラウジング間のモード移行

SERP:検索エンジン結果一覧ページはユーザーインターフェイスの急所を突いている。

ファセット型ナビゲーションには構造化されたメタデータが必要

ファセット検索(ファセットナビゲーション)とは 意味/解説 - シマウマ用語集

アマゾンは書籍に関して検索とナビゲーション用に豊富なインデックスを持っている。

小規模な企業のWebサイトには検索はいらない。ブラウジングで十分だが、ブラウジングはスケーラビリティに欠ける。

大抵のユーザーは正面玄関から来ない。

ポータル:ポータルはWebサイトのホームページと上位から2~3階層まで。

検索:検索では横断検索とファセット性と高速性が必要。
コンテンツの利用経験が増えると検索の単語が増える傾向がある。スニペットで絞り込みのあたりを付ける。絞り込み。ファセットで分類。

検索結果無しを防ぐ方法。パールグローイングは良さそうな文書を選んでそのコンテンツやメタデータからキーワードを探す。類似ページはその一種。オートコンプリートで入力ミスを防ぎ、オートサジェスションで検索のやり直しの方向を勧告する。

「お探しのものがみつからなければ」という文章と一緒に正しいスペルの候補を示すかわりに、「もしかして」に変更することで利用頻度が跳ね上がった。(Google

段階的な組み立て、段階的な追加表示、高速性、代替表示(複数のビュー)、ソート順序の切り替え、アクセシビリティ、予測可能性(検索結果に移行しないでロールオバーで表示する)、欲しいものリストに追加、視覚的オブジェクトの直接操作(Drag&Drop)、検索履歴

デザインパターン

オートコンプリートには、候補を不含むデータの情報源が必要。オートサジェスト

音声検索

ベストファースト(検索結果上位)

ファセット型ナビゲーション:絞り込みフィルタリング

 FaThumb: a facet-based interface for mobile search

https://www.microsoft.com/en-us/research/wp-content/uploads/2006/01/chi2006-fathumb.pdf

詳細検索

パーソナライズ機能

ページネーション:Googleの10個の青いリンクがその例。スニペット、サムネイル、商品画像など

構造化された結果:多くのデータを検索結果に埋め込む

アクション可能な結果:音楽をかけるなど

検索とブラウジングの統合

『Apache Solr入門』(打田 智子他著、技術評論社、2017年5月10日発行)

LuceneJavaインターフェイスなのに対して、SolrはJSON over HTTP

ドキュメントの重みづけはLucene/Solr V6からOkapi BM25

スキーマは、フィールドとフィールドタイプ(数値、文字列、日付)を指定する。フィールドは非テキスト系とテキスト系に分かれる。非テキスト系には、製品名、ジャンルなど単語分割が必要ない文字列が含まれる。テキスト系はAnalyzerの指定が必要。

Analyserは、文字フィルタ、トークナイザ、トークンフィルタを指定する。

文字フィルター:例えば、文字フィルタで半角カタカナを全角カタカナに変換してからトークナイザに渡す。MappingCharFilterFactory, ICUNormalizer2CharFilterFactory, PatternReplaceCharFilterFactory, HTMLStripCharFilterFactory

トークナイザ:JapaneseTokeniserFactoryは、kuromojiを利用する。kuromojiは20万語の辞書をもつ。ユーザ辞書の定義も可能。トークナイザの出力であるトークンには位置情報(文字が隣接しているかなど)、文書内オフセット情報も持つ。タームは文字列情報のみで、転置インデックスを参照する単位である。出力されるトークンはトークナイザ依存。他にWhiteSpaceTokunizerFactory, StandardTokunizerFactory(日本語以外), NGramTokunizerFactoryがある。

トークンフィルター:日本語のトークンフィルターには、JapaneseBaseFormFilterFactory(活用する品詞を語幹形にする)、JapanesePartOfSpeechStopFilterFactory(助詞や記号を除去する)、StopFilterFactory(日本語では、「です」「ます」「あの」「その」など)、CJKWidthFilterFactory(半角カタカナを全角に)、JapaneseKatakanaStemFilterFactory(長音記号の表記揺れを吸収する)、LowerCaseFilterFactory(ASCII大文字を小文字に)、SynonymFilterFactory(シノニム辞書を使う)

検索結果の処理:ソート(スコアによる、特定フィールドによる)、ハイライト、絞り込み、ファセット(フィールド毎のグルーピング)

ドキュメントの追加、削除、コミットあるいはオプティマイズをJSONコマンドによるバッチ処理XMLデータによるバッチ処理の両方でできる。コミットはインデックスの更新を確定して検索結果に反映する操作。

インデクシング前処理:正規表現による文字列置換、スクリプトJavaScriptなど)で記述した前処理をする、デフォルト値の設定、時間に「NOW」を設定、UUID、フィールドの追加、sourceからdestへのコピー、multivalueの値の連結、同件数カウント、文字列長カウント、言語判定と言語別フィールドへの切分け、値が最大のフィールド値、同最小フィールド値、HTMLタグを取り除く、指定のパターン無視、空文字削除、値の両端をトリム、最大文字列でカット、ハッシュ計算で同一ハッシュ値を登録しない、フィールドの重複値を除く、URLの特徴を抽出

PDF、Word文書などバイナリ形式のデータを登録する。Apache TikaからApache PDFbox、Apache POIを呼び出す。

クエリパーサはユーザが入力した検索キーワードの文字列をSolrが解釈できる構造に変換する。

Lucentクエリパーサ(標準クエリ):論理演算(AND,OR,NOT)、フレーズ検索(複数の単語の出現順序を保証する)、ワイルドカード検索、あいまい検索(検索語に距離が近い語を検索する)、近傍検索(指定した複数の単語が近くに出現するドキュメントを検索する)、正規表現による検索、範囲検索、単語の重み付け、定数スコア

語の距離:Levenshtein距離アルゴリズム

http://www.levenshtein.net

複数のフィールドをまたがるクエリ、日付型演算

ハイライト:スニペットと検索語の強調を行うハイライタ

ファセット:フィールドの値でグループ化して、グループ別の件数などを検索する。

サーチハンドラに、サーチコンポーネントが登録される。solarconfig.xmlに設定。

空間検索:地図情報は持っていない。ドキュメントで経度・緯度を登録する。境界ボックスや円で検索とフィルタリングする、経度・緯度などの形状情報、地点間・矩形間の距離でソートまたはブースト。地球を完全な球体として距離を計算する。

ファンクションクエリ:フィールドの値を検索結果のスコアに反映する

検索するとき、トークナイズされたトークンをフレーズとして扱うかどうか(オプション)。例:検索エンジンで検索するとき、「検索」と「エンジン」にトークナイズする。フレーズとして扱わないときは「検索」または「エンジン」でヒットした文書を返す。フレーズとして扱うときは、「検索」の次に「エンジン」が来る文書を返す。

検索精度

適合率=(検索された文書中の適合文書数)/(検索された文書数)

再現率=(検索された文書中の適合文書数)/(適合文書数)

適合率と再現率はトレードオフなので、F値=両者の調和平均を見る。

ランキング

キーワードと文書の類似度:TFIDFSimilarity, BM25Similarity

『在日米軍基地 米軍と国連軍、「2つの顔の80年史」』(川名 晋史著、中公新書、2024年1月25日発行)

在日米軍基地は第2次世界大戦後の連合国による日本占領から現在まで続いている。当初の目的は日本の軍事的無力化であった。1952年4月のサンフランシスコ平和条約で日本は主権を回復したが、その前の1950年6月25日勃発の朝鮮戦争で日本本土の基地を朝鮮戦争出撃基地として使える必要性が生じた。

日米安保条約によって米軍が日本に駐留する権利や極東の安全のために利用する権利を得た。サンフランシスコ平和条約日米安保条約、吉田・アチソン交換公文の三位一体により戦後日本の安全保障の枠組みの基礎ができた。

日米安保条約に根拠をもつ在日米軍は日本を直接的に防衛するための存在ではない。」ということは米国政府も、日本政府も認めているところのようだ。在日米軍は米軍基地や米国人を防衛する義務は(米国の中で)ある。

朝鮮戦争時の国連軍の後方司令部は今も横田基地にあり、極東に事が起きれば、国連軍地位協定によって日本政府に事前相談なしに活動でき、日本政府は支援する義務がある。この枠組みは今も維持されている。

2015年に成立した平和安全法制によって、さらに国連軍参加国は、国連軍の立場でいくのか、それとも外国の軍隊として自衛隊と協力するかを選択できるようになった。

『Elastic Stack 実践ガイド』(惣道 哲也著、インプレス、2020年8月11日発行)

Elastic Search は全文検索ソフトとして2010年に登場した。索引検索を行う。

用語

転置インデックスは、単語と単語が出現する文書の組み合わせで作成されるインデックスのこと。

検索ライブラリー:インデクサとサーチャの機能を提供する。Apache LuceneJAVA

検索サーバレイヤ:Apache Solr、Elasticsearch。REST APIインターフェイスを持つ。いずれも検索ライブラリLuceneを呼び出す。

検索システムレイヤ:クローラーやWebユーザーインターフェイスを持つ。エンタープライズサーチ製品。オープンソースではnamazu、Fessがある。

ElasticsearchはオランダのElastic社が開発している。Compassが前身。コア機能はオープンソース。高機能オプションはElastic License。

REST API

リクエスト:API エンドポイント(http://<サーバ名>:<ポート番号>/<パス文字列>/、パス文字列で操作対象リソースや呼び出す機能)。HTTPメソッド(GET, POST, PUT, DELETE. HEAD)。リクエストメッセージ(JSONオブジェクト)

レスポンス:HTTPステータスコード、レスポンスメッセージ

JSON形式のドキュメント志向DB

ドキュメントはJSON形式、Key:Valueがフィールド。転置インデックスはフィールド毎に作成、管理する。

フィールドのタイプ。text、keyword、数値、日付,真偽、オブジェクト、配列、その他。textは単語に分割されて単語毎に転置インデックスを作成する。keywordは分割せずそのまま保存(例:New YorkをNewとYorkにしない)。

大量のドキュメントを複数のシャードに分散配置することで検索性能をスケールする。

同じデータソースから(日付指定などで)任意の数のインデックスを作る。インデックステンプレート機能。

クエリ

”_search”APIエンドポイントを使う。複数のインデックスをまたがる検索ができる。クエリーをJSONオブジェクトとして発行する。

全文検索クエリ:text型フィールドを、転置インデックスを用いて検索する。検索キーワードを複数指定するとOR検索(デフォルト)になる。AND条件、最低N個(minimum_should_match)、match_phraseクエリで語順の指定、query_string(leceneシンタックスを直接指定)

Termレベルクエリ:keyword型フィールドを完全一致で検索する。

Boolクエリ:must, should, must_not, filter

クエリ結果のソート:ソート対象フィールドと順序、その組み合わせ、スコアによるソート、配列型データの算術計算に基づくソート

アナライザ

全文検索を行うために文書を単語に分割する処理機能がAnalyser

日本語の形態素解析プラグイン:kuromoji Analysis Plugin

単語に区切るだけでは単語の表記の揺れがある:単数/複数、大文字/小文字、時制と活用形。これを解消する方法にステミングは語幹、正規化、ストップワード(The, ofなど)の除去、English Analyser。

フィールド毎にAnalyserを指定できる。アナライズ機能のカスタム定義ができる。あらかじめよく使う機能を組み合わせたビルトインAnalyserが用意されている。

ステップ(構成要素):Char filter(オプションで任意数指定)⇒Tokenizer(必須。一つ指定する)⇒Token Filter(オプションで任意数指定)

Char filterにはHTML Strip Char(タグの除去)、Mapping Char(特定文字のマッピング)、Pattern Replace (正規表現)

Tokenizerは多数ある。単語分割、N-gram、構造化テキスト分割(メールアドレス、URL、ハイフン区切りなど)

Token FilterはLower case, Stop token, Stemmer, Synonym

日本語用プラグインICU Analysis Plugin (日本語、中国語、韓国語、タイ語などアジア系言語用)

kuromoji Analysis Plugin:Char filter(踊り字の正規化)、Tokenizer(モードとしてのnormal, search, extended。句読点除去)、Token filter(活用基本形、品詞の指定による除去、読み仮名、長音削除、ストップ語除去、漢数字を英数字表現に)

Aggregation:データ分析、分類、集計を行う。Metrics(統計値)、Buckets(分類)などがある。

スクリプティング:ユーザー独自のロジックを構成する。Painless言語。

Elastic Stack

関連するソフトウェア群。Kinabaはデータをブラウザで可視化する。Logstashはログを収集・加工・転送するためのデータ処理パイプラインを実現する。Beatsはログやメトリックスデータを収集、転送する。

『Pythonではじめる情報検索プログラミング』(佐藤 達也著、森北出版、2020年12月18日発行)

単語

文字Nグラムとは、長さNの部分文字列のこと。N=1はユニグラム、N=2はバイグラムという。文字Nグラムの頻度分布でテキスト中の良く使われている部分文字列を調べたり、隣り合う確率の高い文字を調べることができる。

Physonの形態素解析モジュールにはMeCabjanomeがある。形態素解析で品詞の推定もできる。

bag-of-words:形態素の多重集合で文書を表す。

特徴語:文書の中で内容を表す語のこと。

不要語(stop word):どのような文書でも特徴語になりえない語。日本語の不要語リストにはSlothLibで提供されているものがある。

文書dの特徴語wの条件:

①wはdに高頻度に出現する:単語出現頻度 TF(d,w)、Term Frequency

②wは特定の文書だけに出現する。文書集合D(コーパス)の要素数|D|とする。D中でwが出現する頻度をDF(D,w)とする。wの珍しさは |D|/DF(D,w)

TF・IDF=TF(d,w)・log2(|D|/DF(D,w)) によって語の特徴語らしさを計算する。

文書のランキングの方法

文書の類似性による方法:クエリXと検索対象文書Yとの関連度を求めてランキングする。

①Jaccard係数 |X∩Y|/|X∪Y|。他にDice係数、Simpson係数もある。

例)XとYの特徴語のリストを比較する。

ベクトル空間モデル 文書ベクトルとは文書に現れる特徴語のウエィトを要素とするベクトルのこと。コサイン類似度は文書の類似度として文書ベクトルの角度の類似を計算する。

検索システムの評価。文書集合Uで、検索結果S、正しい検索結果の集合A

①適合度(精度)P=|S∩A|/|S|

②再現率 R=|S∩A|/|A|

F値=2/(1/P+1/R)=2PR/(P+R)で評価する。

適合率・再現率曲線の面積で評価する。平均適合率

テストコレクション:TREC(NIST)、BMIR-J1、BMIR-J2、NICTIR(NICT

文書クラスタリング

検索結果のグループ化。距離データ(類似度の逆)が小さいもの同志をまとめる。

①k平均法 あらかじめ決めておいた数のクラスタに分ける。

②凝集型階層的クラスタリング  個々のデータを要素とするクラスタを作り、順番にマージする。距離の測り方に群平均法とウオード法などがある。

クラス分類

正しい分類を導く。

学習用データには正解が分類基準として付属する。教師あり学習

機械学習では訓練データから汎化を行う。

分類器の評価では、訓練用データと評価用データを分ける。

ナイーブベイズとはデータの特徴とクラスの関係を条件付き確率で表す機械学習アルゴリズムの一種。

サポートベクトルマシンはマージン最大化を特徴とする分類器。

分類器の評価には交差検証を用いることができる。

クエリの修正:適合性フィードバック。その手法でRocchioのアルゴリズム

クエリ拡張:Web検索では検索エンジンの検索履歴などから。シソーラスを利用することもできる。Wikidata、Wikidata Query Service(問い合わせ言語:SPARQL)

トピック:潜在的意味インデキシング(LSI)は特異値分解による次元削減を応用する。

文書単語行列とは文書ベクトルを並べた行列、これを特異値分解する。特異値分解は単語文書行列を3つの行列の積に分解する。

非負値行列因子分解によるトピック抽出。非負値行列分解は単語文書行列を要素が負でない2つの行列の積に分解する。

潜在的ディリクレ配分法。文書をある確率分布でトピックを生み出すものと考え、トピックに固有の確率分布で語を生み出し、その結果、bags-of-wordが作成される。確率分布はDireclet分布から作り出せると想定する。

語の関連性

埋め込みとは集合の要素を何らかの空間上に、要素相互の関係と整合するように対応付ける。2次元平面への埋め込みで可視化できる。語のベクトル表現は語彙数の要素をもつ行列で該当する箇所をONにする。次元削減する。

コーパスから語の埋め込みを得る方法としてWord2vecがある。語の特徴を表現するベクトルを機械学習によって導出することを表現学習と呼ぶ。