問題タブ [sentence-similarity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cosine-similarity - word2vec、単語埋め込みの合計または平均?
word2vec を使用して、個々の単語の埋め込みを追加するか、単語の埋め込みの平均を計算することにより、小さなフレーズ (3 ~ 4 単語) を一意のベクトルとして表しています。
私が行った実験から、常に同じコサイン類似度が得られます。トレーニング後に word2vec によって生成された単語ベクトルが単位長 (ユークリッド ノルム) に正規化されていることに関係していると思われますか? または、コードにバグがあるか、何か不足しています。
コードは次のとおりです。
出力は次のとおりです。
コサイン類似性 (ウィキペディア)で定義されているコサイン類似性を使用しています。ノルムと内積の値は実際には異なります。
コサインが同じである理由を誰か説明できますか?
ありがとう、デビッド
mysql - MySQL VARCHAR 列の同様の値
レストラン名とその所在地の都市を格納するためのデータベース テーブルがあります。例:
名前 | 街
イレブン マディソン パーク | ニューヨーク市
グラマシー居酒屋 | ニューヨーク市
ロータス オブ サイアム | 写真 トーク
モダン | LA
ABC キッチン | LA
INSERT の前に着信エントリがある場合、同じ都市に類似のレストラン名がない場合は、先に進んで挿入を実行したいと考えています。
しかし、エントリが { name: "Eleven Madison", city: "NYC" } のようなものである場合、"name" 列で同じ都市の同様のエントリを見つけたいと考えています。この例では、"NYC の "eleven madison park" です。 「、挿入を実行して、「競合」テーブルに新しい行を保存したい-これらのレストランのID(最後の挿入IDと同様の行ID)
次の SQL クエリで、レーベンシュタイン距離アルゴリズムを使用しました。
次に、しきい値を 8 に設定し、levsh が 8 未満の場合は競合としてマークします。つまり、「競合」テーブルに新しいレコードを挿入します。このクエリは、テーブルが 1000 レコードになるまで正常に機能していました。このクエリが完了するまでに 2 秒かかります。
これは、市内のすべてのレストランの levenshtein_ratio を計算しているためであることを理解しています。「Eleven」、「Madison」、またはさらに良いものを含むものは、次のようなことができれば
このクエリを改善および最適化する方法についての提案を手伝ってください。可能であれば、私がやっていることに対するより良いアプローチがあれば教えてください。
ありがとう
python - 文の用語制約を測定する方法は?
私は、その単語が欠落している文がどれほど制約されているかに基づいて、文中の単語の有益性をアルゴリズムで計算する方法を見つけようとしています。たとえば、「キツネ」という単語が文で提供する情報量を計算するにはどうすればよいですか。
「素早い茶色の___がフェンスを飛び越えた」
つまり、ターゲット単語がない場合、ユーザーが空白を埋めるのがどれだけ難しいかをどのように計算できますか?
私はこれまで、ターゲット単語と周囲のすべての単語との合計 word2vec 意味的類似性を調べるアプローチを試みてきましたが、常にうまくいくとは限りません。これに関して行われた既存の作業はありますか?
php - preg_replace が同様のテキストを考慮
パターン内の同様のテキストを考慮して preg_replace を実行しようとしています。私の目標は、OCR ソフトウェアによって出力されたテキストから特定の文字列を削除することです (一部の文字は混乱する可能性があります)。
コード例を挙げましょう:
注意: OCR は 3 番目の文字 ac
を と混同しましたo
。
ここでは、OCR を改善することはオプションではなく、可能でもありません。
入力文字列:
Appartamento sito in Vioolo San Vincenzo, n.4 e censito al
上記の preg_replace の呼び出し後に期待される結果:
Appartamento sito in e censito al
実結果:
Appartamento sito in Vioolo San Vincenzo, n.4 e censito al
levenshtein()
テキストは、 ,のような PHP 関数の意味で類似していると見なす必要がありますsimilar_texts()
(私は考慮していないsoundex()
かmetaphone()
、テキストが英語ではないため)。
使用preg_replace
は必須ではありませんが、少なくともそのパターンと同等のものに対して文字列を評価する機能が必要です。
vector - Mahout - ベクトル間の余弦距離 > 1
DenseVectors として表されるベクトル間の距離を計算するために、Mahout の CosineDistanceMeasure クラスを使用しています。
ここで、いくつかのベクトルのカップルについて、メソッド distance() は 1 より大きい値を返しますが、余弦距離は 0 と 1 の間に含まれると考えられていました。
誰でもこの動作を説明できますか?
前もって感謝します!
r - R: Sentence to word-table の行番号が一致しません
私の以前の問題から、私はいくつかtexts
の異なる行にいくつかあり、テキストからword-table
各単語に対して生成しようとしています。ただし、テキスト列の行番号と、行番号がword-table
異なる場合に問題が発生しています。一部のテキストで検出され、2 つ以上の行が作成されています。最後に、cbind
これら2つを一緒にすることはできません。コードはこちら。結果が、どのテキストがどのテキストであるかを示すためにそれらをバインドできるテキストの行番号とまったく同じになることを望んでいますword-table
。
詳細: テキストに複数の空白またはタブが含まれていました。最初の想定では、追加のスペースが問題を引き起こしている可能性がありますが、追加の空白を削除した後でも、同じ問題が発生します。
助けてください
java - 単語の類似性から文全体の類似性への行き方
WS4J を使用して文の類似性メソッドを実装しました。
2つの文の単語の類似性に基づく記事の文の類似性について読んだことがあります。しかし、単語の類似度に基づいて文全体の類似度を計算して単一の値を返すメソッドは見つかりませんでした。
同様の質問が、この Web サイト ( sentence-similarity-using-ws4j)で行われました。
ご覧のとおり、WS4J を使用して、文内の任意の単語が他の文で synset 一致を検出する (一致する値が 0.9 を超える) 場合に、一致メッセージを返すまでコーディングすることができました。しかし、これは良いアプローチではないと思います。
Yuhua et al [2] の記事を見つけました。すべて非常に便利ですが、全体的な文の類似性に使用した方法を理解できません。
コードを Java で作成したので、Java の実装を探していました。
[2]: Li, Y., McLean, D., Bandar, ZA, O'shea, JD, & Crockett, K. (2006). セマンティック ネットとコーパス統計に基づく文の類似性。知識とデータ工学、IEEE トランザクション、18(8)、1138-1150。
python - ユニグラム言語モデルで計算する確率は?
文補完実装用のユニグラム言語モデルを作成しました。私はすべての単語とその出現回数を持っています。
ここからそれらを比較する方法について混乱しています。それぞれのケースの確率を計算し、最大のものを取る必要があると思います。
使用できる単語が 3 つある場合、各単語の出現回数を比較し、最も高い ? を採用します。これは適切な実装ですか?
または、各単語の出現回数を、トレーニング セットのすべての (異なる?) 単語の数で割りますか?
ありがとうございました。
string - これはすでに文字列類似アルゴリズムですか?
レーベンシュタイン距離を除いて、文字列の類似性アルゴリズムに慣れていません。これは、私が使用しているものであり、理想的ではないことが判明したためです。
だから私は実装したい再帰アルゴリズムのアイデアを持っていますが、それがすでに存在するかどうかを知りたいので、他の人の専門知識を活用できます。
例によるアルゴリズムは次のとおりです。
文字列 1: "ポール ジョンソン"
文字列 2: "ジョン ポールソン"
ステップ 1: すべての最長一致を見つける
マッチ1:「ポール」
マッチ2:「ジョン」
マッチ3:「息子」
マッチ 4: " "
ステップ 2: 次の式を使用して各一致のスコアを計算します: ((match.len/string.len)*match.len) これにより、文字列の長さに基づいて、より長い文字列をバランスの取れた割合で重み付けできます。
マッチ 1: (4/12)*4 = 1.333...
マッチ 2: 1.333...
マッチ 3: .75
マッチ 4: .083
ステップ 3: ステップ 1 と 2 をより大きなスケールで実行します (マッチのマッチ)。これは正確にはわかりません。しかし、私の考えでは、「息子」が「ポール・ジョン」の後に来て、「ジョン・ポール」の後に来たら、それは何かを数えるべきだと思います.
ステップ 4: 計算されたすべてのスコアを合計します。
スコア: 1.333 + 1.333 + .75 + .083333 = 3.4999... (プラス、ステップ 3 で生成されるスコア)
これは誰にとっても見覚えがありますか?他の誰かが実際にこれらの線に沿ってアルゴリズムを作成するのに苦労したことを願っているので、自分でそれを理解する必要はありません.
python - LSA から類似度を取得する方法
私は潜在的な意味分析に取り組んでおり、2 つのドキュメントから類似性を取得しようとしています。Python で潜在意味解析のコードを実行すると、次のようになります。
この数字からどのように類似点を見つけますか?