Закодировать предложение как модель последовательности с помощью Spark - PullRequest
0 голосов
/ 17 июня 2019

Я делаю классификацию текста и использую pyspark.ml.feature.Tokenizer для токенизации текста. Однако CountVectorizer преобразует маркированный список слов в модель мешков слов, а не в модель последовательности.

Предположим, что у нас есть следующий DataFrame с столбцами id и текстами:

 id | texts
----|----------
 0  | Array("a", "b", "c")
 1  | Array("a", "b", "b", "c", "a")
each row in texts is a document of type Array[String]. Invoking fit of CountVectorizer produces a CountVectorizerModel with vocabulary (a, b, c). Then the output column “vector” after transformation contains:

 id | texts                           | vector
----|---------------------------------|---------------
 0  | Array("a", "b", "c")            | (3,[0,1,2],[1.0,1.0,1.0])
 1  | Array("a", "b", "b", "c", "a")  | (3,[0,1,2],[2.0,2.0,1.0])

Здесь я хочу (для строки 1)

Array("a", "b", "b", "c", "a")  | [0, 1, 1, 2, 0]

Так есть ли вообще, что я могу написать пользовательскую функцию для параллельного запуска кодирования? Или есть какая-нибудь другая библиотека, которая может работать параллельно, кроме использования spark?

1 Ответ

1 голос
/ 18 июня 2019

Вы можете использовать StringIndexer и explode:

df = spark_session.createDataFrame([
    Row(id=0, texts=["a", "b", "c"]),
    Row(id=1, texts=["a", "b", "b", "c", "a"])
])

data = df.select("id", explode("texts").alias("texts"))
indexer = StringIndexer(inputCol="texts", outputCol="indexed", stringOrderType="alphabetAsc")
indexer\
    .fit(data)\
    .transform(data)\
    .groupBy("id")\
    .agg(collect_list("texts").alias("texts"), collect_list("indexed").alias("vector"))\
    .show(20, False)

Выход:

+---+---------------+-------------------------+
|id |texts          |vector                   |
+---+---------------+-------------------------+
|0  |[a, b, c]      |[0.0, 1.0, 2.0]          |
|1  |[a, b, b, c, a]|[0.0, 1.0, 1.0, 2.0, 0.0]|
+---+---------------+-------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...