私はホテルの予約システムに取り組んでいます。私の仕事は、ホテルの名前が間違って入力されたときに適切な提案をするアルゴリズムを実装することです。たとえば、ユーザーが実際のホテル名 "MOVENPICK"ではなく "MOFENBICK"としてホテルの名前を入力した場合、私のアルゴリズムは "MOVENPICKを意味しました"と提案する必要があります。私はMachine Learning Ideasを使ってそれを実装するつもりです。この問題のために機能の良い選択は何でしょうか?ホテル名の入力時に提案を実装
答えて
ニューラルネットワークを実装する必要はありません。それはこの特定の仕事のために残忍です。
推奨されるように、Levenshtein-distanceを使用します。 Levenshtein距離の背後にあるアイデアは、文字列に対するメトリックを定義することです。簡単に言えば、コンピュータアルゴリズムは "mofenbick"と "movenpick"が距離2にあると言うことができます(2文字が変更されたため)。
Levennshteinを計算するためのいくつかの擬似コード:
function LevenshteinDistance(char s[1..m], char t[1..n]):
// create two work vectors of integer distances
declare int v0[n + 1]
declare int v1[n + 1]
// initialize v0 (the previous row of distances)
// this row is A[0][i]: edit distance for an empty s
// the distance is just the number of characters to delete from t
for i from 0 to n:
v0[i] = i
for i from 0 to m-1:
// calculate v1 (current row distances) from the previous row v0
// first element of v1 is A[i+1][0]
// edit distance is delete (i+1) chars from s to match empty t
v1[0] = i + 1
// use formula to fill in the rest of the row
for j from 0 to n-1:
if s[i] = t[j]:
substitutionCost := 0
else:
substitutionCost := 1
v1[j + 1] := minimum(v1[j] + 1, v0[j + 1] + 1, v0[j] + substitutionCost)
// copy v1 (current row) to v0 (previous row) for next iteration
swap v0 with v1
// after the last swap, the results of v1 are now in v0
return v0[n]
あなたは文字列の上に定義されたメトリックを持っていたら、あなたはもちろんのホテルの一覧を照会するための高速な方法が必要です。 はナイーブな実装は、データベース内のすべてのホテル名より 1.反復処理になります/与えられた入力とホテル名 3間のレーベンシュタイン距離が最小編集距離
を生成する名前を選んで計算 2を設定しますこれは小さなセットではうまく動作しますが、BKツリーを使用してこれをさらに最適化することができます。
読み物:の
ありがとうございました。私はこれを実装しようとします。しかし、私は機械学習でも自分のスキルを発揮したいので、ニューラルネットワークを使って解決策を作るつもりです。だから、ニューラルネットワークを使ってこれを実装しようとすると、各入力の入力フィーチャは、おそらく私に良い学習曲線を与えるでしょうか? –
それ以外にも、ユーザーが作成しエントリーするたびに数千になるすべてのホテル名を計算するには計算コストがかかりませんか? MLのパラメータを得ることができれば、パラメータ行列との乗算が必要であり、シグモイドをとり、最高のインデックスを特定のクラスにマッピングするだけです。私はプログラミングの初心者です。私の議論は間違っているかもしれません。 –
@Joris:GNU Octaveのための本当の実装がたくさんある場合、なぜ疑似コードを追加するのか不思議です。たとえば、https:// sourceforgeの上にリンクしたものがあります。net/p/octave/strings/ci/default/tree/inst/editdistance.mまた、odepkgには距離があります – Andy
- 1. アドレスバーの提案の実装
- 2. SAMLアサーションコンシューマーサービス(ACS) - 実装上の提案
- 3. 提案:ウェブアプリケーション用のJavaサーバー実装
- 4. ユーザー入力を使用して名前の提案を提供する
- 5. 防止ブラウザのテキスト入力提案
- 6. SAP Dynpro入力フィールドの値提案
- 7. データアクセスインターフェイス名の提案
- 8. 効率的なスラックのようなサブドメイン名の提案を実装する
- 9. Android SearchRecentSuggestions - SearchViewでの入力時に提案が表示されない
- 10. ズーム時のアンドロイドの提案
- 11. rails3 - モデル名の提案
- 12. クラス名の提案は
- 13. Node.JSのカウントダウンを実装するための提案
- 14. Angular2パフォーマンスの提案を実装するYSlow
- 15. カスタマイズ可能なICAPサーバの実装を提案する
- 16. 提案を生成するためにユーザー入力を使用
- 17. Swift - 2つのデータモデルのCoreData実装の提案
- 18. クラス、実装の提案のための大規模構成
- 19. ベストアプローチの提案:C#ベースのWindowsサービスの実装
- 20. 入力アルゴリズムに基づく単語の提案ですか?
- 21. ASP.Net + SQL Serverの設計/実装の提案
- 22. Elasticsearch - Javaで完了提案を実装する(APIバージョン5!)
- 23. 3文字入力後にオートコンプリートボックスで提案する方法は?
- 24. テキスト入力のMonotouchモデルダイアログ(UITableからアクセス可能)の提案
- 25. 入力時に角度材料オートコンプリート検索を実装する
- 26. ロガーデバッグpython既存のコードをどのように実装するか。提案:
- 27. Webサイト実装の提案にセキュリティの義務化ポイントを含める
- 28. Railsモデルの設計:時間を提案して反対提案する
- 29. GTMによるGoogle Adwordsの実装 - 正しい実装を提案してください
- 30. スレッドとデータベースの提案の提案
可能な重複[Googleが「?もしかして、」どのようにアルゴリズム動作しますか?](https://stackoverflow.com/質問/ 307291/google-did-you-mean-algorithm-work) – m7913d
GNU OctaveまたはMATLABにホテル予約システムを実装していますか?私は、例えば、https://octave.sourceforge.io/strings/function/editdistance.htmlのように、leventhsteinを見るでしょう。検索のキーワードは "あいまい検索"かもしれません。https://en.wikipedia.org/wiki/Approximate_string_matching – Andy
最初にOctaveでプロトタイプを実装する予定です。私は最初から開発したいと思っています。私がしようとしているのは、ニューラルネットワークを作成するか、線形回帰を使ってデータセットを学習させ、テストセットや検証セットからの出力を予測できるようにすることです。私は機械学習の初心者であるため、ニューラルネットワークや線形回帰モデルの機能を選択するのは難しいです。 –