Up データの前処理 作成: 2026-02-17
更新: 2026-02-17


    ここでは,ウェブページの場合で,データの前処理を見ていく。

    ウェブページはそのままではノイズが多い。
    ウェブページ前処理は,データベクトルの品質を支える基盤処理。
    これは「埋め込み」の前に行われる

    前処理は,多くの場合,ルールベースの処理(プログラム)で行われる。
    翻って,
      AI を使うほど複雑ではない
        HTML の構造は規則的
        ノイズ除去は決定的なルールで十分
      AI を使うとコストが高い

    但し,最近の大規模検索エンジンでは,一部の前処理 (高度な文書構造理解が必要な場合) に AI モデルを使うこともある。
    LayoutLM 系のモデル(文書レイアウト理解モデル)など。


    前処理は,複数の段階的アルゴリズムの組み合わせで構成される。
     ウェブページ前処理の全体フロー:
      (1) HTML パース(構文解析)
      (2) 不要要素の除去(ノイズ除去)
      (3) 本文抽出(Boilerplate Removal)
      (4) テキスト正規化(Normalization)
      (5) 文分割(Sentence Splitting)
      (6) トークン化(Tokenization)


    (1) HTML パース(構文解析)
    アルゴリズム
      HTML を DOM(木構造)として読み込む
      各ノード(タグ)を木として保持
      ノードの種類(p, h1, div, script…)を分類

    使われる技術
      HTML パーサー(BeautifulSoup, lxml など)
      これは AI ではなく決定的アルゴリズム


    (2) 不要要素の除去(ノイズ除去)
    目的
      広告,ナビゲーション,フッター,スクリプトなどを削除する

    アルゴリズム例
      <script>, <style> タグを削除
      class="advertisement" のような既知の広告クラスを削除
      <nav>, <footer> などの構造タグを削除
      画像の alt テキストは残す(検索に有用)

    ここも AI は使わず,ルールベース


    (3) 本文抽出(Boilerplate Removal)
    ここが前処理の中で最も重要で,検索エンジンの品質を左右する工程。

    代表的なアルゴリズム
    ・ TextRank(グラフベース)
      各段落をノードとし,類似度でエッジを張る
        中心性の高い段落を本文とみなす

    ・ Readability(Firefox の記事抽出アルゴリズム)
      各 DOM ノードにスコアを付ける
         テキスト量
         リンク密度
         タグ種類(p, h1 は高スコア)
        スコア最大のノードを本文と判定

    ・ Boilerpipe(機械学習ベース)
      各ブロックに特徴量を付けて分類
         テキスト密度
         平均文長
         リンク比率
        SVM などで本文/非本文を分類

    ここは場合によっては AI を使う
    (ただし Transformer ではなく軽量 ML)


    (4) テキスト正規化(Normalization)
    アルゴリズム
      HTML エンティティのデコード(& → &)
      改行・空白の正規化(複数空白 → 1 つ)
      Unicode 正規化(NFKC)
      小文字化(英語の場合)
      記号の統一(例:全角 → 半角)

    数学的には「写像」ではなく単純な置換処理


    (5) 文分割(Sentence Splitting)
    アルゴリズム
      句読点(。!?)で分割
      英語ならピリオド + 大文字で分割
      例外処理(Mr., Dr., U.S. など)

    代表的な手法
      ルールベース(正規表現)
      Punkt(統計モデル)

    AI を使う場合もあるが,軽量モデルが多い。


    (6) トークン化(Tokenization)
    ここで初めて 埋め込みモデルに依存する処理になる。

    アルゴリズム
      SentencePiece / BPE によるサブワード分割
      語彙表(vocab)に基づいて ID に変換

    数学的には
      text → (t1,t2,…,tn)