スペック試験を改善するための機械学習技術の研究



イントロ


これは、人工知能の実装に関連するブログ記事のシリーズの一部です.あなたが物語の背景またはそれがどう行くかに興味があるならば
#1) How to scrape Google Local Results with Artificial Intelligence?
#2) Real World Example of Machine Learning on Rails
#3) AI Training Tips and Comparisons
#4) Machine Learning in Scraping with Rails
#5) Implementing ONNX models in Rails
#6) How ML Hybrid Parser Beats Traditional Parser
#7) How to Benchmark ML Implementations on Rails
#8) Investigating Machine Learning Techniques to Improve Spec Tests
今週は、一般的なテスト目的のための機械学習モデルを実装するためのロードマップを紹介します.

私の問題


現在のspecテストは、存在をチェックするのに適していて、抽出されたデータのタイプです.ただし、抽出されたデータの品質をチェックするために特別なテストを実装する必要があります.
例:
{ title ": "serpapi "は存在しているかどうかをチェックします.
しかし、この例が次の場合には、同じテストセットが渡されます.
{ title } : "SerpApi "
両方のタイトルは存在します、彼らの出現は同じです、そして、両方ともストリングクラスです.それで、それがストリングの中のどんなHTTPコードも含んでいるかどうかチェックするために問題部分に実装する特別なテストをします.もちろん、誰かがそれに気づくならば、このプロセスは行われます.

バックグラウンドリサーチと有用な方法


KNN(k‐最近傍)アルゴリズム


このアルゴリズムは、1951年以降、統計的分類に使用されている.その効果は、エレガントなシンプルさです.あなたが数学的な方法でデータの特性を表すことができるならば、あなたはこれらの数からn -次元ベクトルをつくることができます.このベクトルの終わりはそのn次元空間の点を表します.これらの点の近さは、各々のベクトルの行動の間の数学的類似性を定義するでしょう.それゆえに、各々の同様の振舞いは、我々にカテゴリーの下で彼らを分類する機会を与えます.これらの点を分類するために,同じアプローチを利用した.我々の問題のために利用したいものは、個々の抽出された値が過去の抽出されたデータと同じように振る舞うかどうかチェックするもう一つのステップです.

ユークリッド距離公式


これらの数式はまた、ユークリッドの数式とピタゴラスの間の接続を作成することによって、18世紀に古くから派生している.これらはポイント間の高次元距離計算に不可欠である.彼らのためのチートシートです.

読者が混乱する前に、なぜこれらの2つの概念が重要であるかを説明しましょう.それぞれの特徴は、抽出されたデータをカバーするかどうか、そのクラス、または長さ、または単にその文字のインデックス;彼らはすべてデカルトの平面の1次元で覆われる.
以下に例を示します.
キーのタイトルは、大多数のケースの7 - 10の長さの文字列で構成されます.
タイトルがserpapiであるならば、ベクトルは[ 7 ]です.個々のキーのタイトルをモデル化したセットを想像しましょう.
[
  {
    "title": "SerpApi",
    "type": "API",
    "place": "Austin"
  },
  ...
  {
    "title": "XCompany",
    "type": "X",
    "place": "XXX",
  }
]
これらの値はすべて次のようなデータを生成します.

行の個々のポイントとして長さ列のエントリを想像してください.線は1次元です.そこでd(p,q)=1 . q=p−qを用いることができる.我々がXcompanyであることを見つけたいならば、キー列を持たないで、我々はこれらの値の各々のために公式を8と比較して、最小の(1 - NN)を取るか、Nの最も近い隣人(K - NN)のために大多数のケースをとって、それがタイトルであると分類します.
さて、この声明を再目的にして、Xcompanyがタイトルであるかどうか尋ねましょう.しかし、それをするためには、キーの列にあるタイトル以外のすべての行に対して、NoCountのタイトルでデータを並べ替える必要があります.

ここでXECOに対して同じ方法を使用した場合、最小距離を持つ点はSerpaiとなります.これはキーがタイトルであることを示しています.

重みのクラスタリング


文字列の長さが多くの場合、分類できる俳優ではないので、読者はこれがどのように役に立つかを尋ねるかもしれません.これはマシンの学習プロセスが行われるところです.これらのベクトルの各々は、それらのウエイトベクトル、各々のウェイトベクトルがベクトル1として始まることによって調整されることができて、それに応じて各々の正しいか不正確な推測によって調整される.これは、類似したものがより近くである、そして、類似していないものが最後に互いから離れているベクトルの異なるクラスタをつくります.

III仮説


上記の技術を実装することは、抽出されたデータの品質をテストする際に利用することができ、あらゆる種類のJSONデータをテストするために使用することができる.プロセスは次の順序でなければなりません:

  • キーを持つデータベースを作成する
    [
    { }
    "title ": "serpapi "
    Googleの有機的結果
    "usecases ": {
    "テキスト": "スクレーピングのSERP結果"
    ...
    //
    ...

    ...
    ]
  • キーテキストとキーUSEasease ->テキストは別として扱われます:
  • 各キーに対するデータベースの作成(innerrestキーの同じキー名の除外)

  • USESCESUSESUNEテキストが省略され、モデリングに混乱が生じないように注意してください.このキーが定義されたテキストを含むかどうか測定しているので、それは全体的なモデルの正確さを傷つけません.見積もりは確かにテストします.
    それぞれの現在のキーの個々のモデルを作成します.このプロセスは、簡単な熊手コマンドであるべきです
  • RSpecテストの内部でこれらのモデルを統合して、特定の統計的閾値が例を通して偽の応答に達したときに結果が何かがオフになっていることを開発者に警告する品質をチェックして、エラーのより高い確実性を持つ問題モデルを指摘します.ここで述べた統計的閾値は異なる抽出データを通してテストされる.私たちは、それが一般化されることができるか、各々の異なるデータ構造のために提案されなければならないかどうか見るでしょう.
  • 構造分析試験


    一般的な特徴と並んで
  • ワードレベルインデクシング
  • 抽出された値のクラス、その長さなどの異なった一般的な特徴と並んでいる文字レベルインデックス
    文字レベルインデックス
  • への
  • この実装がトーチのようなサードパーティライブラリを使用するかどうか(異なる言語とスタック間のモジュール性のために)
  • RSpecテストでエラーを発生させる統計的エラー閾値は何か?
  • 異なった構造データでエラーのしきい値が異なるはずですか?
  • 我々は、JSONをCSVデータ作成者に書くことから始めます.その後、このプロセスをライブラリから独立させることが重要です.そのために、ファイル内の個々のモデルをどのように保存するかを調べます.それが前のブログ記事で言及されたMLハイブリッドパーサーで我々に価値があるので、語レベルインデックスは仮説をテストする最初の選択です.

    V -結論


    私は、注目のためにユーザーに感謝し、すべてのサポートのためserseriの華麗な人々.来週には、上記のようにキーモデルの作成方法を検討します.
    元来は2022年3月23日にhttps://serpapi.com年に出版された.