1

我需要使用 aws comprehend 使用Aws comprehend对 csv 数据集执行情绪分析,我想知道如何以最快的方式执行此分析并将每个分析的所有结果保存在单个 JSON 文件中?

到目前为止,我有一个服务器读取我的数据集的每一行(文本),并且对于每一行,我触发一个 lambda 函数,该函数对该行执行分析并将结果发送回服务器。然后将结果附加到 json。

服务器片段代码:

 # performing analysis and appending results
    with open(tmp_csv) as csv_data:

        csv_reader = csv.DictReader(csv_data)
        
        for csv_row in csv_reader:
               result = client.invoke(FunctionName='SentimentAnalysis',InvocationType='RequestResponse',
                                      Payload=json.dumps(csv_row))
               object = json.loads(json.loads(result['Payload'].read().decode())['body'])
               result_json_data.append(object)
               json_data.append(csv_row)

lambda函数代码(情绪分析):

def lambda_handler(event, context):
    text = (event["text"])
    if text == "":
        text = "No text"
    language_analysis = comprehend.detect_dominant_language(Text = text)
    language = language_analysis['Languages'][0]['LanguageCode']
    if (language not in  ["ar", "hi", "ko", "zh-TW", "ja", "zh", "de", "pt", "en", "it", "fr", "es"]):
        language = "en"
    sentiment = comprehend.detect_sentiment(Text=text, LanguageCode= language)
    response = {}
    response['Sentiment'] = sentiment['Sentiment']
    response['id'] = event['id']
    response['SentimentScore'] = sentiment['SentimentScore']
    json_response = json.dumps(response)
    print(json_response)
    return {
        'body': json_response
    }

如您所见,通过服务器,我将文本发送到 lambda 函数 (client.invoke),该函数将首先检测此文本的语言 (detect_dominent_language),然后使用 detect_sentiment 函数执行分析。它最终将结果发送回服务器。

这个实现的问题是它需要太多时间来执行,因为我的数据集有超过十万个条目,并且所有的分析都是按顺序进行的。

我应该怎么办 ?我应该继续在循环中使用调用方法来多次调用我的 lambda 函数吗?

也许一种解决方案是只触发一个 lambda 函数来读取 csv 数据集并执行完整的分析,但在这种情况下,我如何才能充分利用 lambda 内存(大约 10gb 的大小)?

谢谢你。

4

1 回答 1

0

你有几个不同的选择。

  1. 如果您的用例对延迟敏感并且您需要在几秒钟内做出响应,那么您可以使用 Comprehend 的 BatchDetectSentiment API。它接受 25 个请求的输入批次并在内部并行化这些请求。

  2. 如果您的用例对延迟不敏感,请查看异步 API startSentimentDetectionJob。API 可以在单个请求中从 S3 获取多达一百万个文档并生成单个输出文件。您将需要对 json 格式进行一些简单的预处理/后处理。

于 2021-02-06T20:58:00.910 回答