チュートリアル: Azure AI サービスを使用した Translator
Translator は、言語翻訳やその他の言語関連の操作を実行できるようにする Azure AI サービスです。 このチュートリアルでは、Translator を使用して、Azure Synapse Analytics でインテリジェントな多言語ソリューションを構築する方法について説明します。
このチュートリアルでは、Translator と MMLSpark を使用して、以下の処理を行う方法を示します。
- テキストを翻訳する
- テキストを表記変換する
- 言語を検出する
- 文を分割する
- 辞書検索
- 辞書の例
Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。
- Azure Data Lake Storage Gen2 ストレージ アカウントが既定のストレージとして構成されている Azure Synapse Analytics ワークスペース。 使用する Data Lake Storage Gen2 ファイル システムの "Storage Blob データ共同作成者" である必要があります。
- Azure Synapse Analytics ワークスペースの Spark プール。 詳細については、Azure Synapse での Spark プールの作成に関する記事を参照してください。
- Azure Synapse での Azure AI サービスの構成に関するチュートリアルで説明されている事前構成手順。
Synapse Studio を開き、新しいノートブックを作成します。 はじめに、MMLSpark をインポートします。
import mmlspark
from mmlspark.cognitive import *
from notebookutils import mssparkutils
from pyspark.sql.functions import col, flatten
構成前の手順で構成した、リンクされた Translator を使用します。
ai_service_name = "<Your linked service for translator>"
Translator サービスの主要な操作は、テキストの翻訳です。
df = spark.createDataFrame([
(["Hello, what is your name?", "Bye"],)
], ["text",])
translate = (Translate()
.setLinkedService(ai_service_name)
.setTextCol("text")
.setToLanguage(["zh-Hans", "fr"])
.setOutputCol("translation")
.setConcurrency(5))
display(translate
.transform(df)
.withColumn("translation", flatten(col("translation.translations")))
.withColumn("translation", col("translation.text"))
.select("translation"))
["你好,你叫什么名字?","Bonjour, quel est votre nom?","再见","Au revoir"]
表記変換は、音声の類似性に基づいて、単語や語句の書記法 (アルファベット) を、ある言語から別の言語のものに変換するプロセスです。
transliterateDf = spark.createDataFrame([
(["こんにちは", "さようなら"],)
], ["text",])
transliterate = (Transliterate()
.setLinkedService(ai_service_name)
.setLanguage("ja")
.setFromScript("Jpan")
.setToScript("Latn")
.setTextCol("text")
.setOutputCol("result"))
display(transliterate
.transform(transliterateDf)
.withColumn("text", col("result.text"))
.withColumn("script", col("result.script"))
.select("text", "script"))
text | script |
---|---|
"["Kon'nichiwa","sayonara"]" | "["Latn","Latn"]" |
翻訳する必要があるのに、Translator サービスに送信するテキストの言語がわからない場合は、言語の検出操作を使用できます。
detectDf = spark.createDataFrame([
(["Hello, what is your name?"],)
], ["text",])
detect = (Detect()
.setLinkedService(ai_service_name)
.setTextCol("text")
.setOutputCol("result"))
display(detect
.transform(detectDf)
.withColumn("language", col("result.language"))
.select("language"))
"["en"]"
文章内で文の境界の位置を識別します。
bsDf = spark.createDataFrame([
(["Hello, what is your name?"],)
], ["text",])
breakSentence = (BreakSentence()
.setLinkedService(ai_service_name)
.setTextCol("text")
.setOutputCol("result"))
display(breakSentence
.transform(bsDf)
.withColumn("sentLen", flatten(col("result.sentLen")))
.select("sentLen"))
"[25]"
エンドポイントを使用すると、単語または語句の翻訳の代替候補を取得できます。
dictDf = spark.createDataFrame([
(["fly"],)
], ["text",])
dictionaryLookup = (DictionaryLookup()
.setLinkedService(ai_service_name)
.setFromLanguage("en")
.setToLanguage("es")
.setTextCol("text")
.setOutputCol("result"))
display(dictionaryLookup
.transform(dictDf)
.withColumn("translations", flatten(col("result.translations")))
.withColumn("normalizedTarget", col("translations.normalizedTarget"))
.select("normalizedTarget"))
normalizedTarget |
---|
"["volar","mosca","operan","pilotar","moscas","marcha"]" |
辞書検索を実行した後、ソース テキストと翻訳を dictionary/examples エンドポイントに渡すことによって、文または語句のコンテキスト内で両方の用語が現れる例の一覧を取得できます。
dictDf = spark.createDataFrame([
([("fly", "volar")],)
], ["textAndTranslation",])
dictionaryExamples = (DictionaryExamples()
.setLinkedService(ai_service_name)
.setFromLanguage("en")
.setToLanguage("es")
.setTextAndTranslationCol("textAndTranslation")
.setOutputCol("result"))
display(dictionaryExamples
.transform(dictDf)
.withColumn("examples", flatten(col("result.examples")))
.select("examples"))
[{"sourcePrefix":"I mean, for a guy who could ","sourceSuffix":".","targetPrefix":"Quiero decir, para un tipo que podía ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"Now it's time to make you ","sourceSuffix":".","targetPrefix":"Ahora es hora de que te haga ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"One happy thought will make you ","sourceSuffix":".","targetPrefix":"Uno solo te hará ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"They need machines to ","sourceSuffix":".","targetPrefix":"Necesitan máquinas para ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"That should really ","sourceSuffix":".","targetPrefix":"Eso realmente debe ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"It sure takes longer when you can't ","sourceSuffix":".","targetPrefix":"Lleva más tiempo cuando no puedes ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"I have to ","sourceSuffix":" home in the morning.","targetPrefix":"Tengo que ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":" a casa por la mañana."},{"sourcePrefix":"You taught me to ","sourceSuffix":".","targetPrefix":"Me enseñaste a ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"I think you should ","sourceSuffix":" with the window closed.","targetPrefix":"Creo que debemos ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":" con la ventana cerrada."},{"sourcePrefix":"They look like they could ","sourceSuffix":".","targetPrefix":"Parece que pudieran ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"But you can ","sourceSuffix":", for instance?","targetPrefix":"Que puedes ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":", por ejemplo."},{"sourcePrefix":"At least until her kids can be able to ","sourceSuffix":".","targetPrefix":"Al menos hasta que sus hijos sean capaces de ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"I thought you could ","sourceSuffix":".","targetPrefix":"Pensé que podías ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"I was wondering what it would be like to ","sourceSuffix":".","targetPrefix":"Me preguntaba cómo sería ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."},{"sourcePrefix":"But nobody else can ","sourceSuffix":".","targetPrefix":"Pero nadie puede ","targetTerm":"volar","sourceTerm":"fly","targetSuffix":"."}]
Spark インスタンスがシャットダウンされるようにするには、接続されているセッション (ノートブック) を終了します。 プールは、Apache Spark プールに指定されているアイドル時間に達したときにシャットダウンされます。 また、ノートブックの右上にあるステータス バーから [セッションの停止] を選択することもできます。