55일차_AI_Language

Luis_J·2024년 11월 27일
0

MS_AI_School 5기

목록 보기
57/70
post-thumbnail

Summary

Introduction

인선미 강사님

Azure AI 서비스란?

Azure AI 서비스는 클라우드 기반 서비스로, 다양한 AI 기능을 제공하여 정교하고 지능적인 애플리케이션을 개발할 수 있는 빌딩 블록입니다. 이를 활용하면 자연어 처리, 컴퓨터 비전, 의사결정 지원 등 여러 범주에 걸친 AI 작업을 수행할 수 있습니다.

Code, Conept & Explanation

자연어 처리(NLP)

정의

자연어 처리는 인간의 서면 및 음성 언어를 이해하고, 이를 기반으로 적절히 응답하는 AI 기술입니다. 이를 통해 텍스트 분석, 문서 요약, 브랜드/회사명 추출 등 다양한 작업을 수행할 수 있습니다.

주요 활용 사례

  • 감정 분석: 소셜 미디어 피드의 감정을 검색하여 제품 마케팅에 활용.
  • 문서 요약: 대량의 문서를 효율적으로 요약.
  • 텍스트에서 주요 엔터티 추출: 브랜드 및 특정 회사명을 식별.

NLP 기술 및 프로세스

텍스트 분석

구조화되지 않은 텍스트에서 유의미한 정보를 추출하기 위해 다음과 같은 기술이 사용됩니다:

  • 토큰화: 텍스트를 단어 단위로 분리하여 분석.
  • 빈도 분석: 주요 단어와 주제를 파악.
  • 텍스트 분류: 머신러닝 알고리즘을 통해 텍스트를 긍정/부정으로 분류.

텍스트 요약

긴 텍스트 본문에서 주요 요점을 요약하여 정보의 핵심을 간결하게 전달합니다.

Azure AI 서비스 활용 방법

  1. 리소스 생성: Azure 포털에서 AI 리소스를 설정.
  2. 엔드포인트 및 키 식별: REST API와 SDK를 활용해 서비스에 접근.
  3. REST API 사용: HTTP 요청을 통해 데이터를 전송하고 결과를 JSON 형태로 반환.

주요 Azure AI 서비스

  • Azure OpenAI: GPT-4 모델을 활용한 생성형 AI.
  • Azure Custom Vision: 이미지 분류 및 개체 탐지 지원.
  • Azure Cognitive Search: 문서에서 통찰력을 제공하는 검색 솔루션.
  • Azure Immersive Reader: 접근성을 높이는 읽기 솔루션.

주요 메서드

1. authenticate_client

역할

Azure Cognitive Services에 인증된 클라이언트를 생성합니다. 이후 다른 메서드에서 이 클라이언트를 사용해 텍스트 분석 작업을 수행합니다.

코드

def authenticate_client():
    load_dotenv()  # 환경 변수(.env 파일) 불러오기
    ai_endpoint = os.getenv('AI_SERVICE_ENDPOINT')  # API 엔드포인트
    ai_key = os.getenv('AI_SERVICE_KEY')  # API 키
    ta_credential = AzureKeyCredential(ai_key)  # API 키로 인증 객체 생성
    return TextAnalyticsClient(endpoint=ai_endpoint, credential=ta_credential)  # 클라이언트 반환

입력

  • .env 파일에 저장된 AI_SERVICE_ENDPOINT와 AI_SERVICE_KEY.

출력

  • TextAnalyticsClient: 텍스트 분석 API와 통신할 수 있는 클라이언트 객체.

2. analyze_text_files

역할

지정된 폴더에서 텍스트 파일을 읽고, 텍스트 분석 메서드(감정 분석, 엔터티 추출 등)를 호출합니다.

코드

def analyze_text_files(client, folder_path):
    for file_name in os.listdir(folder_path):  # 폴더 내 파일 목록 반복
        file_path = os.path.join(folder_path, file_name)
        with open(file_path, encoding='utf8') as file:
            text = file.read()  # 파일 내용 읽기
        print(f"Analyzing File: {file_name}\n{text}\n")
        detect_language_result = client.detect_language(documents=[text])[0]  # 언어 감지
        detected_language = detect_language_result.primary_language.iso6391_name  # 언어 코드 가져오기
        sentiment_analysis(client, text, detected_language)  # 감정 분석
        extract_entities(client, text, detected_language)  # 명명된 엔터티 추출
        extract_linked_entities(client, text, detected_language)  # 링크된 엔터티 추출
        extract_key_phrases(client, text, detected_language)  # 핵심 구 추출

입력

  • client: 인증된 클라이언트 객체.
  • folder_path: 분석할 텍스트 파일이 있는 폴더 경로.

출력

  • 각 파일에서 수행된 분석 결과를 콘솔에 출력.

3. sentiment_analysis

역할

텍스트의 감정을 분석하여 긍정, 중립, 부정 점수를 반환합니다.

코드

def sentiment_analysis(client, text, language):
    result = client.analyze_sentiment(
        documents=[{'id': '1', 'language': language, 'text': text}],
        show_opinion_mining=True
    )[0]
    print(f"Document Sentiment: {result.sentiment}")
    print("Overall scores: positive={0:.2f}; neutral={1:.2f}; negative={2:.2f}".format(
        result.confidence_scores.positive,
        result.confidence_scores.neutral,
        result.confidence_scores.negative,
    ))
입력
  • text: 감정을 분석할 텍스트.
  • language: 텍스트의 언어 코드(예: "en"은 영어, "ko"는 한국어).
    출력
    문서 전체의 감정(positive, neutral, negative).
    긍정, 중립, 부정 점수.

4. extract_entities

역할

텍스트에서 장소, 사람, 조직 등의 엔터티를 추출합니다.

코드

Copy code
def extract_entities(client, text, language):
    result = client.recognize_entities(
        documents=[{'id': '1', 'language': language, 'text': text}]
    )[0]
    print("\nNamed Entities:")
    for entity in result.entities:
        print(f"  Text: {entity.text}, Category: {entity.category}, Confidence Score: {entity.confidence_score}")

입력

  • text: 엔터티를 추출할 텍스트.
  • language: 텍스트의 언어 코드.

출력

  • 텍스트에서 추출된 엔터티 정보:
    • Text: 엔터티 텍스트(예: "서울").
    • Category: 엔터티 카테고리(예: "Location", "Organization").
    • Confidence Score: 신뢰 점수.

5. extract_linked_entities

역할

텍스트의 엔터티를 외부 데이터 소스(예: Wikipedia)와 연결합니다.

코드

def extract_linked_entities(client, text, language):
    result = client.recognize_linked_entities(
        documents=[{'id': '1', 'language': language, 'text': text}]
    )[0]
    print("\nLinked Entities:")
    for entity in result.entities:
        print(f"  Name: {entity.name}, Source: {entity.data_source}, URL: {entity.url}")
        for match in entity.matches:
            print(f"    Match Text: {match.text}, Confidence Score: {match.confidence_score}")

입력

  • text: 링크된 엔터티를 추출할 텍스트.
  • language: 텍스트의 언어 코드.

출력

  • 링크된 엔터티 정보:
    • Name: 엔터티 이름(예: "서울").
    • Source: 데이터 소스(예: Wikipedia).
    • URL: 엔터티에 대한 링크.

6. extract_key_phrases

역할

텍스트에서 주요 구문(키워드)을 추출합니다.

코드

def extract_key_phrases(client, text, language):
    result = client.extract_key_phrases(
        documents=[{'id': '1', 'language': language, 'text': text}]
    )[0]
    print("\nKey Phrases:")
    for phrase in result.key_phrases:
        print(f"  {phrase}")

입력

  • text: 핵심 구를 추출할 텍스트.
  • language: 텍스트의 언어 코드.

출력

  • 텍스트에서 추출된 주요 구문(키워드).
    요약된 흐름

Challenges & Solutions

Results

What I Learned & Insights

Conlusion

  1. authenticate_client: 클라이언트를 생성합니다.
  2. analyze_text_files: 폴더 내 모든 파일을 읽고, 각각의 텍스트에 대해 다음 메서드를 호출합니다:
  • sentiment_analysis: 텍스트의 감정을 분석.
  • extract_entities: 장소, 사람, 조직 등의 엔터티를 추출.
  • extract_linked_entities: 엔터티를 외부 데이터와 연결.
  • extract_key_phrases: 텍스트에서 주요 키워드를 추출.
profile
New life & History

0개의 댓글

관련 채용 정보