テキスト分析、情報検索、テキストマイニング、特徴抽出、検索エンジンの構築、機械翻訳、言語モデルのトレーニングなどのシナリオでは、DataWorks の PyODPS ノードを使用して、オープンソースの中国語形態素解析ツールである jieba を利用できます。これにより、中国語のテキストを単語に分割し、関連するテキスト分析処理を実行できます。また、デフォルトの辞書がビジネスニーズを満たせない場合は、カスタム辞書を作成して分かち書きを追加したり、形態素解析の結果を修正したりすることもできます。
背景情報
DataWorks が提供する PyODPS ノードは、Python コードの直接編集と、MaxCompute の Python SDK を使用したデータ開発をサポートしています。PyODPS ノードには PyODPS 2 ノードと PyODPS 3 ノードの 2 種類があります。PyODPS 3 は、よりシンプルで使いやすい API インターフェースを提供し、PIP による直接インストールをサポートしており、MaxCompute のリソースと機能をより有効に活用できます。開発操作には PyODPS 3 ノードを使用することを推奨します。詳細については、「PyODPS 3 ジョブの開発」をご参照ください。
-
PyODPS 3 は Python 3.x バージョンのみをサポートし、PyODPS 2 は Python 2.x と Python 3.x の両方のバージョンをサポートします。Python 2.x バージョンを使用する必要がある場合は、PyODPS 2 ノードのみを選択できます。
-
本記事の操作は機能を示すためのサンプルであり、実際の生産環境での使用は推奨されません。
前提条件
-
DataWorks ワークスペースが作成済みであること。詳細については、「ワークスペースの作成」をご参照ください。
-
MaxCompute コンピューティングリソースが作成され、DataStudio にバインドされていること。詳細については、「MaxCompute データソースの作成とワークスペースへのバインド」をご参照ください。
事前準備:オープンソースの jieba 中国語形態素解析パッケージのダウンロード
GitHub にアクセスし、以下の手順に従ってオープンソースの jieba 中国語形態素解析パッケージをダウンロードします。GitHub で jieba リポジトリ (`https://github.com/fxsjy/jieba`) を開き、緑色の [Code] ボタンをクリックし、表示されたパネルで [Download ZIP] をクリックして ZIP 圧縮パッケージをダウンロードします。
実践 1:オープンソースの辞書パッケージを使用した形態素解析
-
ワークフローを作成します。操作の詳細については、「ワークフローの作成」をご参照ください。
-
MaxCompute リソースを作成し、jieba-master.zip パッケージをアップロードします。
-
作成したワークフローを右クリックし、 を選択します。
-
Create Resource ダイアログボックスで、各パラメーターを設定し、Create をクリックします。
エンジンタイプを MaxCompute に、エンジンインスタンスを doc_test (中国 (上海)) に設定し、リソースタイプで Archive を選択し、ODPS リソースとしてアップロードにチェックを入れます。主要なパラメーター設定は以下のとおりです。
パラメーター
説明
Upload File
Click Upload をクリックし、画面の指示に従ってダウンロードした jieba-master.zip ファイルを選択します。
Name
リソースの名前です。アップロードするファイル名と一致させる必要はありませんが、命名規則に従う必要があります。画面の指示に従ってリソース名をカスタマイズできます。この実践例では、名前を jieba-master.zip に設定します。
-
ツールバーの
アイコンをクリックし、画面の指示に従って新しいリソースを送信します。
-
-
テストデータテーブル jieba_test とテスト結果テーブル jieba_result を作成します。
作成したビジネスプロセスを右クリックし、 を選択します。画面の指示に従ってテーブルを作成し、DDL モードを使用してテーブルのフィールド情報を設定します。作成が完了したら、テーブルを開発環境に提出します。詳細については、「MaxCompute テーブルの作成と使用」をご参照ください。
この実践で作成する必要がある 2 つのテーブルの設定要点は以下のとおりです。
テーブル名
DDL 文
役割
jieba_test
CREATE TABLE jieba_test ( `chinese` string, `content` string );テストデータを格納するために使用します。
jieba_result
CREATE TABLE jieba_result ( `chinese` string ) ;形態素解析のテスト結果データを格納するために使用します。
-
テストデータをダウンロードし、テストデータテーブル jieba_test にインポートします。
-
形態素解析テストデータ をクリックして、テストデータ jieba_test.csv をローカルにダウンロードします。
-
DataStudio ページで、
アイコンをクリックします。 -
Data Import Wizard ダイアログボックスで、データをインポートするテストテーブル jieba_test を入力して選択し、Next をクリックします。
-
ローカルにダウンロードした jieba_test.csv ファイルをアップロードし、アップロード情報を設定してデータをプレビューし、Next をクリックします。
-
By Nameを選択し、Import Dataをクリックします。
-
-
PyODPS 3 ノードの作成
-
作成したワークフローを右クリックし、 を選択します。
-
Create Node ダイアログボックスで、Name に「word_split」(例)と入力し、OK をクリックします。
-
-
オープンソースの辞書パッケージを使用して形態素解析コードをテスト実行します。
PyODPS 3 ノードで以下のサンプルコードを実行し、jieba_test テーブルにアップロードされたテストデータに対して形態素解析を行い、結果テーブルの最初の 10 行を返します。
def test(input_var): import jieba result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) # odps.stage.mapper.split.size は、実行の並列度を向上させるために使用できます hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # ご利用の jieba-master.zip 圧縮パッケージを参照します src_df = o.get_table('jieba_test').to_df() # ご利用の jieba_test テーブルのデータを参照します result_df = src_df.chinese.map(test).persist('jieba_result', hints=hints, libraries=libraries) print(result_df.head(10)) # 形態素解析結果の最初の 10 行を表示します。より多くのデータは jieba_result テーブルで確認する必要があります説明odps.stage.mapper.split.size は、実行の並列度を向上させるために使用できます。詳細については、「フラグパラメーターリスト」をご参照ください。
-
実行結果の表示
実行が完了したら、以下の方法で jieba 形態素解析プログラムの実行結果を確認できます:
-
方法 1:ページ下部のOperational Logs領域で確認します。
-
方法 2: ページの左側でAd Hoc Query ボタンをクリックし、一時的なクエリノードを作成して、テスト結果テーブルjieba_resultの結果データを表示します。
select * from jieba_result;
-
実践 2:カスタム辞書を使用した形態素解析
オープンソースの jieba 形態素解析のデフォルト辞書が要件を満たせない場合は、カスタム辞書を使用して形態素解析の結果をさらに修正できます。以下に、カスタム辞書を使用して形態素解析を行う方法の例を示します。
-
MaxCompute リソースの作成
PyODPS のユーザー定義関数は、MaxCompute にアップロードされたリソース (テーブルリソースまたはファイルリソース) を読み取ることができます。この場合、ユーザー定義関数はクロージャ関数または Callable クラスとして記述する必要があります。
説明DataWorks の MaxCompute 関数登録機能を使用して、複雑なユーザー定義関数を参照できます。詳細については、「ユーザー定義関数の作成と使用」をご参照ください。
この実践では、クロージャ関数を使用して、MaxCompute にアップロードされたリソースファイル (つまりカスタム辞書) key_words.txt を参照する方法を例として示します。
-
File タイプの MaxCompute 関数の作成
作成したビジネスプロセスを右クリックしてを選択し、リソース名にkey_words.txt を入力してからCreateをクリックします。
-
カスタム辞書の内容を入力して保存、送信します。
以下はカスタム辞書の例です。ご自身のテストニーズに応じて、適切なカスタム辞書を入力できます。
増分バックアップ セキュリティコンプライアンス
-
-
カスタム辞書を使用して形態素解析コードをテスト実行します。
PyODPS 3 ノードで以下のサンプルコードを実行し、jieba_test テーブルにアップロードされたテストデータに対して形態素解析を行い、結果テーブルの最初の 10 行を返します。
def test(resources): import jieba fileobj = resources[0] jieba.load_userdict(fileobj) def h(input_var): # ネストされた関数 h() で、辞書の読み込みと形態素解析を実行します result = jieba.cut(input_var, cut_all=False) return "/ ".join(result) return h # odps.stage.mapper.split.size は、実行の並列度を向上させるために使用できます hints = { 'odps.isolation.session.enable': True, 'odps.stage.mapper.split.size': 64, } libraries =['jieba-master.zip'] # ご利用の jieba-master.zip 圧縮パッケージを参照します src_df = o.get_table('jieba_test').to_df() # ご利用の jieba_test テーブルのデータを参照します file_object = o.get_resource('key_words.txt') # get_resource() は MaxCompute リソースを参照します mapped_df = src_df.chinese.map(test, resources=[file_object]) # map は関数を呼び出し、resources パラメーターを渡します result_df = mapped_df.persist('jieba_result2', hints=hints, libraries=libraries) print(result_df.head(10)) # 形態素解析結果の最初の 10 行を表示します。より多くのデータは jieba_result2 テーブルで確認する必要があります説明odps.stage.mapper.split.size は、実行の並列度を向上させるために使用できます。詳細については、「フラグパラメーターリスト」をご参照ください。
-
実行結果の表示
実行が完了したら、以下の方法で jieba 形態素解析プログラムの実行結果を確認できます:
-
方法 1:ページ下部のOperational Logsエリアで確認します。
-
方法 2: ページの左側でAd Hoc Query ボタンをクリックし、一時クエリノードを作成して、テスト結果テーブル jieba_result2 の結果データを確認します。
select * from jieba_result2;
-