忍者、ロックスター、魔法使い—現代の履歴書のテキストの正規化について

写真 (左から): Mwangi Gatheca NinjaAustin Neill RockstarPierrick Van Troost Magic

Indeed では、「We help people get jobs」というミッションを実現するために、履歴書の内容を正しく理解し、最適な採用企業の目に留まるように努めています。膨大な量のテキストを理解するというだけでも複雑な問題ですが、ソーステキストが履歴書のように多岐にわたる内容を含む場合、この問題はさらに難しいものになります。

人それぞれ履歴書の書き方は違いますし、奇抜な職種名も存在します。ソフトウェアエンジニアと正しく履歴書をラベル付けをしようとするならば、Dev の魔法使いJava エンジニアソフトウェアエンジニアSE がすべて同じ職種を指す可能性があることを考慮する必要があります。実際に、Indeed に寄せられた1億5千万件以上の履歴書の中には、一つの職種を表すのに何千通りもの書き方があるかもしれません。この全ての履歴書を人間がラベル付けするのは、日々新しい履歴書が作成されていくなかで、不可能な作業です。

じゃあ、その仕事って結局何なの?

仕事の実際の内容をもっとよく理解するために、Indeed では、職種名に対して正規化という処理をしています。正規化とは、語句の同義語 (もしくは同値類) を探す処理のことです。履歴書を意味のある方法で分類できるので、採用企業は、自社求人に関連性の高い職務経験を持つ求職者を見つけることができます。

例えば、ソフトウェアエンジニアとソフトウェアデベロッパーが同じ職種を指すと判断した場合には、ソフトウェアエンジニアを探している採用企業に対し、ソフトウェアデベロッパーという職種名の記載がある履歴書も表示することができます。 これは、企業が採用したい職種名が書かれた履歴書の数自体が少ない地域では、特に有用です。

職種名や資格名、そして企業名などを正規化すると、履歴書の情報を機械学習モデルの中で特徴やラベルとして使用することができます。履歴書に書かれた biology (生物学) が、 bio (英語でプロフィールを指す) や、よくあるスペルミスの boilogy と同じ意味か判断する必要がありますし、求職者が看護師の資格を持っているかどうか予測するには、正看護師を示す RN や registered nurse が記載された履歴書を正しくラベル付けする必要があります。

テキストを正規化するには

テキストを正規化する方法はたくさんあります。簡単な最初のモデルでは、各文字列が互いにどれだけ類似しているか測定します。こうした文字列同士の距離を測るのに、「文字」に対しては、レーベンシュタイン距離、そして「語句」に対してジャッカード距離という2つの一般的な手法を使いました。  これらの距離を用いて、スペルミスを検知するために文字の距離を測定し、 細胞生物学専攻細胞生物学を一緒のグループに分けられるように「語句」の距離を測定しました。

ステップ1: 前処理

多くのテキストに関するモデルと同じように、まずテキストデータのクリーニングを行う必要があります。こうした前処理で、語句から句読点を取り除き、頭文字言葉や略称、略語などを正式名称と置換するほか、同義語が複数あればより一般的な語句に置換したり、 ステミングと呼ばれる語幹の抜き出し (例: 動詞の接尾辞である ing を削除するなど) を行います。

ステップ2: 語句の出現頻度

その後、語句の出現頻度のしきい値を定義します。文字列の頻度がこのしきい値を下回る場合、この文字列が潜在的な正規化値ではないと考えます。

ステップ3: ミンハッシュ

出現頻度数の低い文字列を取り除いたら、語句をグループに分類する必要があります。グループ分けで最も一般的な手法は、語句の距離を判断するものです。boilogy と biology はどれくらい違うのでしょうか。

準備をするにあたり、コンピューターのデータ処理能力を考慮する必要があります。企業名などの履歴書の各項目に対し、何百万もの一意の文字列が存在します。 各文字列の全ての組み合わせの距離を調べるのは、以下に示した数だけ比較すべき組み合わせの数が存在するので、時間がかかり非効率的です。

ここでは n は文字列の数を表しています。100万件の異なる文字列に対して、5000億通りの組み合わせの比較を行わなければいけなくなります。文字列の距離の計算を実現可能にするために、比較する組み合わせの数を減らす必要があります。

この課題に取り組むため、局所性鋭敏型ハッシュを使いました。このアルゴリズムのセットは同様のアイテムを一緒にバケット内にハッシュするもので、およその文字列の距離を算出します。特に、ミンハッシュアルゴリズムがおよそのジャッカード距離を算出します。これは、セットの集合というよりアイテムセットの交差を指します。

ミンハッシュを使ったおよそのジャッカード距離の算出は、含まれる語句によって定義される文字列の距離を簡単に測定できます。ミンハッシュの使用は、同じミンハッシュのバケット内にある文字列のみを比較するので、比較する必要のある組み合わせの数を大きく削減します。

ミンハッシュを実行し、多数の比較を取り除いたら、正規化したバージョンのレーベンシュタイン距離を計算し、文字に基づく距離の指標を出します。

 

ステップ4: レーベンシュタイン距離

その後、レーベンシュタイン距離の値が非常に高い組み合わせは取り除きます。最終的には、細胞生物学や<細胞生物学専攻どの、かなり類似した組み合わせのグループが残ります。

ステップ5: L2 ノルム

類似した文字列が一緒にグループ分けされる場合、そのグループから正規化した数値を選択するのが妥当です。しかし、どの値を選べばいいのでしょうか。どの文字列のどの数値を、標準の (正規化した) 値に定めれば良いのでしょうか。

これを、ラベルなどの外部情報に依らずに判断するには、履歴書内の文字列の頻度を見ます。頻繁に登場する文字列は、おそらく特定の文字列の中でもより標準的な値といえます。

しかし頻度だけに基づいて正規化した数値を選択したくはありません。最も出現頻度の高い値は、そのグループのほとんどの文字列の標準となり得ますが、すべての文字列ではありません。あるグループには、フランス、フランス語、フランス語と経済学などを含む組み合わせが含まれるかもしれません。この場合、最初の2つの文字列を一緒に正規化しますが、3つ目は除外します。

この問題に対処するために、各組み合わせに対して、特徴のベクトルを作成しました。このベクトルは、2つの距離の測定値とより一般的な語句の頻度の重み付き逆数を含みます(wf の w は重みを示し f は、コーパス内の語句の出現頻度を示します)。逆数を使用することで、文字列が高い頻度を持つ場合、数の出力が低くなります。これは、類似性が高い際に文字列の距離が短くなることと一貫しています。

それから、これら3つの特徴に基づいて、語句を最も低いベクトルの大きさ (L2ノルム)を持つ語句に対して、正規化します。こうすることで、人間のラベル付けの正規化の精度がさらに向上します。

実例

次の例は、実際にこの正規化を行ったときのものです。下図は、検討する職種名と、1番目に記載された職種名の Java developer II からの距離を記載したものです。

私たちは、次の手順を実行しました

ステップ1では、前処理の際に、rockstar のような無関係な語句を取り除き、 er などの語尾を削除し、語幹の抜き出しを行いました。

ステップ2では、どの職種名が正規化するのに必要な出現回数を持つか、しきい値を1000にして判断しました。Rockstar java developer は外れてしまいました。

ステップ3では、ミンハッシュのアルゴリズムを使用して、職種名をジャッカード距離でグループ分けし、距離が0.7未満の場合は、グループから職種名を取り除きました。Barista  (バリスタ)Night shift janitor (夜勤の用務員) はグループから除かれました。

ステップ4では、レーベンシュタインの距離比を計算し、比が0.3未満の場合、グループから職種名を削除しました。Developer が除かれました。

最後にステップ5では、標準化した値をジャッカード距離の最も短いベクトル、レーベンシュタインの距離比、そしてw/回数 (L2ノルム) に基づいて、標準化した値を選びます。2つの文字列を含むグループなので、距離は同じ、特徴の回数だけが異なります。ここでは重みを50としました。ベクトルは以下のようになりました。

  • Java developer II [0.33,0.15,0.005]
  • Rockstar java developer [0.33,0.15,0.5]

最初のベクトルの L2 ノルムが0.36と、2つ目のベクトル0.62よりも小さいので、正規化した値は Java developer II となります。

これが正規化のベストアプローチか?

その他の多くの手法でも、語句の意味や分野ごとでの語句の文脈を考慮することで、テキストの正規化を行い、同義語の距離を測定することができます。事実、私たちは現在このフレームワークへのフレーズの埋め込みに取り組んでいます。それが完成するまでは、現行のアプローチは、構造化テキストの中のあらゆるフィールドをあらたに正規化できるような方法を考える時間を大幅に節約してくれているので、うまく機能していると言えるでしょう。 また、すこしチューニングを加えると、 Indeed 履歴書に使われる28言語のほとんどに対してこのモデルを使用することが出来ます。

この手法は、異なる種類のデータセットにも使用できます。職務内容や、採用企業が候補者スクリーニングに質問できる機能の Indeed Questions に応用できます。正規化は、専門家である人間による判断を回避するものではありません。しかし、巨大なグローバルプロダクトには、専門家を支援し、スケーリングするために、使用するのが有用でしょう。

正規化はテキストを理解するうえで無くてはならないものです。テキスト生成や、ディープラーニングの分類に比べたら地味かもしれませんが、同じくらい重要なものです。正規化は同義語を発見することで、検索エンジンを支援します。機械学習モデルの特徴やラベルを作成し、データ分析をずっと簡単にします。この記事で説明したようなモデルは、正規化の処理を高速化してくれるため、新たに何年も作業に費やすことなく、別の国に展開できます。また、こうしたモデルは新しいデータにも簡単に応用できるので、語彙の変遷にともなって正規化も更新することができます。

数学的なモデルをテキストの正規化に使い、Indeed では求職者や採用企業をもっとよく理解して、変化に適応していき、最終的には皆さんが望む仕事につけるよう支援を続けていきます。

Tweet about this on TwitterShare on FacebookShare on LinkedInShare on RedditEmail this to someone