- 개선 과제 : 생성형 AI 성능평가 방법에 관한 연구
- 진행 계획
1.생성형 AI란 무엇인가 ? | 11/4 |
2. 생성형 AI의 작동 원리 및 과제/한계점 | 11/13 |
2.생성형 AI의 평가 사례는? | 11/22 |
3.우리의 적용 상황은 어떠한가? | 12/29 |
4.개선 Idea 및 방법은? | 12/6 |
Summary | 12/12 |
1.생성형 AI란 무엇인가?
-
- Wikipidea 정의 : 텍스트, 이미지, 기타 미디어를 생성할 수 있는 일종의 인공지능(AI) 시스템이다.[1][2] 생성형 AI는 입력 트레이닝 데이터의 패턴과 구조를 학습한 다음 유사 특징이 있는 새로운 데이터를 만들어낸다.[3][4]
- AMAZON 정의 : 생성형 AI 또는 gen AI는 이미지 및 동영상과 같은 새로운 콘텐츠와 아이디어를 생성하고 새로운 문제를 해결하는 데 기존에 알던 내용을 재사용할 수 있는 AI의 일종입니다 ( https://aws.amazon.com/ko/what-is/generative-ai/)
- IBM 정의 : gen AI라고 불리기도 하는 생성형 AI는 사용자의 프롬프트 또는 요청에 따라 텍스트, 이미지, 비디오, 오디오 또는 소프트웨어 코드와 같은 독창적인 콘텐츠를 생성할 수 있는 인공 지능(AI)입니다. (https://www.ibm.com/kr-ko/topics/generative-ai)
2.생성형 AI의 작동원리 및 개선과제/한계점?
1) 생성형 AI는 어떤 것들이 있는가?
2) 생성형 AI 작동 방식은? (출처 : https://www.ibm.com/kr-ko/topics/generative-ai)
대부분의 경우 생성형 AI는 다음과 같은 세 단계로 작동합니다.
- 학습: 다양한 세대의 AI 애플리케이션의 기반이 될 수 있는 파운데이션 모델을 생성합니다.
- 조정 - 파운데이션 모델을 특정 세대 AI 애플리케이션에 맞게 조정합니다.
- 생성, 평가 및 재생: 생성형 AI 애플리케이션의 아웃풋을 평가하고 품질과 정확성을 지속적으로 개선합니다.
a) 학습
생성형 AI는 다양한 유형의 생성형 AI 애플리케이션의 기반이 되는 딥 러닝 모델인 파운데이션 모델에서 시작됩니다.
오늘날 가장 일반적인 파운데이션 모델은 텍스트 생성 애플리케이션을 위해 만들어진 대규모 언어 모델(LLM)입니다.
b) 조정
- 미세 조정
미세 조정에는 콘텐츠 생성 애플리케이션과 관련된 라벨이 지정된 데이터(애플리케이션이 수신할 가능성이 높은 질문 또는 프롬프트)와 그에 해당하는 정답을 원하는 형식으로 모델에 입력하는 작업이 포함됩니다.
미세 조정은 노동 집약적인 작업입니다. 개발팀은 대규모 데이터 라벨링 인력을 보유한 회사에 이 작업을 아웃소싱하는 경우가 많습니다.
- 인간 피드백을 통한 강화 학습(RLHF)
RLHF에서 인간 사용자는 생성된 콘텐츠를 평가하고, 모델은 이 평가를 사용해 정확도 또는 관련성을 높이기 위해 모델을 업데이트합니다. 종종 RLHF는 사람들이 동일한 프롬프트에 대해 서로 다른 아웃풋을 '채점'하는 방식으로 진행됩니다.
하지만 챗봇이나 가상 어시스턴트에게 타이핑을 하거나 말을 걸어서 아웃풋을 수정하는 것처럼 간단한 방식으로 수행될 수도 있습니다.
▶Tuning 작업 : 개발 단계에서 tunning 작업시 인간의 정성적인 평가를 통하여 tuning 작업을 진행하기도 한다. 그 기법으로 A/B Testing 기법을 사용 한다.
c) 생성, 평가, 추가 조정
- 개발자와 사용자는 생성형 AI 앱의 결과물을 지속적으로 평가하고, 정확도나 관련성을 높이기 위해 일주일에 한 번씩 모델을 추가로 조정할 수 있습니다. (반면, 파운데이션 모델 자체는 1년에 한 번 또는 18개월에 한 번 정도로 업데이트 빈도가 훨씬 낮습니다.)
생성형 AI 앱의 성능을 개선하는 또 다른 옵션은 검색 증강 생성(RAG)입니다.
▶ 위의 생성형 AI 작동 방식은 기본적인 AI 작동원리만을 나타낸 것이며, 각 모델별, 시스템별 작동원리는 상이하며, 상세사항은 본 내용에서는 제외 한다.
3) 생성형 AI의 과제 및 한계점
-우리가 실무를 하면서도 느끼는 한계점들이며, 아래와 같이 크게 5가지로 구분 할 수 있을 거 같다. (출처 : IBM)
a) '할루시네이션' 및 기타 부정확한 아웃풋
- AI 할루시네이션은 생성형 AI의 아웃풋이 무의미하거나 완전히 부정확하지만 너무나 그럴듯해 보이는 경우를 말합니다. 대표적인 사례는 한 변호사가 세간의 이목을 끄는 사건을 준비하기 위해 조사에 생성형 AI 도구를 사용했는데, 이 도구가 인용문과 출처가 포함된 몇 가지 예시 사례를 완전히 허구로 '생산'한 경우입니다(ibm.com 외부 링크).
- 일부 실무자들은 할루시네이션이 모델의 정확성과 창의적 능력의 균형을 맞추기 위해서는 불가피한 결과라고 생각합니다. 그러나 개발자는 가드레일이라고 하는 예방 조치를 구현하여 모델을 관련성이 있거나 신뢰할 수 있는 데이터 소스로 제한할 수 있습니다.
- 지속적인 평가와 조정은 할루시네이션과 부정확성을 줄이는 데 도움이 될 수 있습니다.
b) 일관성 없는 아웃풋
- 생성형 AI 모델의 가변적 또는 확률적 특성으로 인해 동일한 인풋이 약간 또는 상당히 다른 아웃풋을 초래할 수 있습니다.
- 프롬프트를 반복적으로 개선하거나 합성하는 프롬프트 엔지니어링을 통해 사용자는 생성형 AI 애플리케이션에서 원하는 결과를 일관적으로 제공하는 프롬프트에 도달할 수 있습니다.
c) 편향
- 생성형 모델은 학습 데이터 또는 라벨이 지정된 데이터, 외부 데이터 소스 또는 모델 조정에 사용된 인간 평가자에 존재하는 사회적 편견을 학습하고 그 결과 편향되거나, 불공정하거나, 모욕적인 콘텐츠를 생성할 수 있습니다.
- 모델의 편향된 아웃풋을 방지하기 위해 개발자는 다양한 학습 데이터를 확보하고, 학습 및 튜닝 중 편향 방지를 위한 가이드라인을 수립하며, 모델 아웃풋의 편향성 및 정확성을 지속적으로 평가해야 합니다.
d) 설명 가능성 및 메트릭 부족
- 많은 생성형 AI 모델은 '블랙박스' 모델이므로 의사 결정 과정을 이해하기 어렵거나 불가능할 수 있으며, 기본 알고리즘을 만드는 엔지니어나 데이터 과학자조차도 내부에서 정확히 어떤 일이 일어나고 있는지, 특정 결과에 도달하는 방법을 이해하거나 설명할 수 없습니다.
- 설명 가능한 AI 사례 및 기법은 실무자와 사용자가 생성형 모델의 프로세스와 아웃풋을 이해하고 신뢰하는 데 도움이 될 수 있습니다.
- 생성된 콘텐츠의 품질을 평가하고 비교하는 것도 어려울 수 있습니다. 기존의 평가 메트릭은 창의성, 일관성 또는 관련성의 미묘한 측면을 포착하지 못할 수 있습니다. 생성형 AI를 위한 강력하고 신뢰할 수 있는 평가 방법을 개발하는 것은 여전히 활발하게 연구되고 있는 분야입니다.
e) 보안, 개인정보보호 및 지적 재산에 대한 위협
- 생성형 AI 모델은 사용자가 보안 및 데이터 프라이버시를 침해하는 조치를 취하도록 속일 수 있는 피싱 이메일, 가짜 신원 또는 기타 악성 콘텐츠를 생성하는 데 악용될 수 있습니다.
- 개인정보가 노출되지 않도록 주의 한다.
f) 딥페이크
- 딥페이크는 다른 사람이 한 번도 하지 않았거나 말한 적이 없는 행동을 보고, 시청하고, 듣고 있다는 것을 사람들에게 납득시키기 위해 AI가 생성하거나 AI로 조작한 이미지, 비디오 또는 오디오를 지칭합니다.
- 이는 생성형 AI의 힘이 악의적인 의도로 어떻게 활용될 수 있는지를 보여주는 가장 소름 끼치는 사례 중 하나입니다.
-위의 "생성형 AI의 과제 및 한계점"을 정리해 보면
할루시네이션' 및 기타 부정확한 아웃풋 |
|
|
일관성 없는 아웃풋 |
|
|
편향 |
|
|
설명 가능성 및 메트릭 부족 |
|
|
보안, 개인정보보호 및 지적 재산에 대한 위협 |
|
|
딥페이크 |
|
|
▶ 위의 과제 및 한계점이 모두 AI 연구자들의 연구 과제 임
- 추가로, 이러한 상황에서 업무 효율성 / 비용 효율성등을 위하여 "AI 검증 자동화"를 할 수 있는가? 도 추가되어야 할 것임.
3.생성형 AI의 평가 사례는?
그렇다면, 다른 연구자들은 어떻게 진행하고 있는지에 대해 사례를 조사해 본다. 음성/영상/멀티모달/센서 등의 영역에서 음성 영역인 LLM을 기준으로 조사해 본다
1) 대표적인 Foundation Model LLM 업체
Reference | gemini_v1_5_report_evaluation 참고자료.pdf |
2) 학계 연구 자료
관련 논문 : Reinforcement Learning from Reflective Feedback(RLRF) : Aligning and improving LLMs via Fine-Grained Self-Reflection: Reinforcement Learning from Reflective Feedback(RLRF - Aligning and improving LLMs via Fine-Grained Self-Reflection.pdf - https://arxiv.org/abs/2403.14238 |
||
- 우리가 검증단계에서 accuracy라고 하는 것은 confusion matrix의 accuracy가 아니다. 해당 accuracy는 개발단계에서 n-best를 추출할때 사용하는 용어
- 우리의 accuracy = TP / TOTAL case
- 여기서 우리는 TN의 개념을 고려하지 않고, 측정하고 이를 Accuracy라고 한다, 즉 모델 예측 정밀도와 유사하다, 정밀도 precision은 모델이 예측한 전체 data 중 참인 값= TP / TP + FP -와 유사하다
- 그 이유는 예외 case 들을 고려하지 않고 있기 때문.
- 개선 과제 : 생성형 AI 성능평가 방법에 관한 연구
- 진행 계획
- 우리의 accuracy = TP / TOTAL case
5.고민 Point 및 개선 idea?
1) 내가 고민하는 Point
- 답이 없는 주관식의 평가는 어떻게 할 것인가? 그 효율화(자동화) 방안은?
2) 개선 idea
1) 답이 없는 주관식의 평가는 어떻게 할 것인가? 그 효율화(자동화) 방안은?
< idea : LLM as a judge >
A) LLM as a judge - AI 연구원에서 일부 연구팀이 이미 해당 관련내용을 연구 중임 - 논문을 Publish 한 상태이며, 현재 https://chat.exaone.ai 에는 아직 반영이 안된 상태임, 논문이 release된 후 반영 예정이라고 함
LLM-as-a-judge 방식은 대형 언어 모델(LLM)을 평가자로 활용하는 방법으로, AI가 생성한 텍스트나 응답의 품질을 평가하는 데 사용됩니다. 이 방식은 특히 인간 평가자의 개입 없이 자동으로 텍스트를 평가할 수 있어, AI 제품의 성능을 모니터링하거나 개선하는 데 유용합니다.
LLM-as-a-judge의 주요 개념
- 평가 목적:
LLM-as-a-judge는 AI가 생성한 텍스트의 품질을 평가하는 데 사용됩니다. 예를 들어, 챗봇의 응답이 적절한지, 번역이 문화적으로 적절한지 등을 평가할 수 있습니다. 이 방식은 정확성, 유용성, 편향성 등 다양한 기준을 바탕으로 평가를 수행할 수 있습니다[1][2]. - 평가 방식:
LLM은 주어진 텍스트에 대해 평가 프롬프트를 사용하여 점수를 매기거나 레이블을 부여합니다. 예를 들어, 챗봇의 응답이 도움이 되는지 여부를 평가하는 프롬프트를 작성하고, LLM이 이를 바탕으로 응답을 평가하게 할 수 있습니다. 이때, LLM은 인간 평가자처럼 텍스트의 뉘앙스나 맥락을 고려해 평가를 수행합니다[1]. - 평가의 유연성:
LLM-as-a-judge는 다양한 평가 기준을 적용할 수 있는 유연성을 제공합니다. 예를 들어, 도움이 되는 응답인지, 편향이 있는지, 문화적으로 적절한지 등 다양한 속성을 평가할 수 있습니다. 이는 특정 애플리케이션에 맞춘 맞춤형 평가가 가능하다는 장점이 있습니다[1][3]. - 한계점:
LLM-as-a-judge 방식은 완벽하지 않으며, 특히 복잡한 논리적 질문이나 문화적 맥락을 평가하는 데 한계가 있을 수 있습니다. 또한, 사실 검증이나 문화적 민감성을 제대로 평가하지 못하는 경우도 있습니다[4].
활용 사례
- 챗봇 평가: 챗봇의 응답이 적절하고 유용한지 자동으로 평가하여, 사용자 경험을 개선할 수 있습니다.
- 번역 평가: 번역된 텍스트가 원문의 의미를 잘 전달하는지, 문화적 맥락을 유지하는지 평가할 수 있습니다.
- 코드 생성 평가: AI가 생성한 코드의 품질이나 정확성을 평가하는 데도 사용할 수 있습니다.
LLM-as-a-judge는 자동화된 평가를 통해 AI 시스템의 성능을 지속적으로 모니터링하고 개선하는 데 중요한 역할을 하고 있습니다.
B) 진행 절차
정답이 없는 주관식을 평가 하기 위한 Process by using "LLM as a judge"
Sequence | Activity | Description |
1 | 주관식 질문을 Query 화 | - 주관식 질문을 Query화 하여 input data ( to 측정 모델) |
2 | 모델 평가 진행 | - 1차 자동화 가능 영역 |
3 | 2번 결과 output을 다시 질문 Query화 | - 1차 결과 output을 다시 input data 화 함 |
4 | 결과 output을 다시 LLM에 평가 진행 | - 알고자 하는 평가 결과를 chatGPT에 prompting 함 - 2차 자동화 가능 영역 |
5 | chatGPT 평가 결과 결과 정리 | - 평가 결과 재 출력 |
그렇다면, "LLM as a Judge" 로 평가 하기 위한 척도는, 어떻게 prompt를 만들어야 할까?
측정 항목 | 설명 |
정확성 (Accuracy) |
|
관련성 (Relevance) |
|
안전성 및 윤리성 (Safety & Ethics) |
|
유창성 및 가독성 (Fluency & Coherence) |
|
환각 방지 (Hallucination Detection) |
|
질문-답변 일치도 (Question-Answer Alignment) |
LLM이 질문의 의도를 정확히 파악하고 그에 맞는 답변을 제공했는지를 평가하는 기준입니다. 질문의 핵심을 놓치거나, 부적절한 답변을 제공하는 경우 낮은 점수를 받을 수 있습니다[1] |
이러한 평가 기준들은 LLM이 생성한 답변의 품질을 다각도로 평가하는 데 사용되며, 특히 정확성, 안전성, 윤리성이 중요한 평가 요소로 작용합니다. LLM-as-a-judge 평가는 이러한 기준을 바탕으로 자동화된 방식으로 대규모 데이터를 평가할 수 있어, 인간 평가의 한계를 보완하는 데 유용합니다.
6. 적용 Pilot
1. CASE : 1개 문장 prompt에 대해, 1개 관점의 평가
- 1차 질문 - 정치: 윤석열 탄핵될까?
- 정확도: 4.5 / - 관련성: 5점 / - Hallucination Detection: 5점
No | Activity | Result |
1. 정확도 측정 -4.5점 |
최초 input prompt | 윤석열 탄핵될까? |
1차 LLM 답변 | 윤석열 대통령의 탄핵 가능성은 현재 정치적, 법적 논란의 중심에 있습니다. 그의 탄핵 논의는 최근 비상계엄 선포와 관련된 논란에서 비롯되었습니다. 2024년 12월 3일, 윤 대통령이 비상계엄을 선포했으나, 이는 국회에서 즉각적으로 해제되었고, 이후 야당인 더불어민주당은 윤 대통령의 행위를 헌법 위반으로 규정하며 탄핵을 추진하고 있습니다[1][2]. 탄핵 절차와 가능성 탄핵 발의: 야당은 윤 대통령이 헌법을 위반했다고 주장하며 탄핵 소추안을 발의할 계획입니다. 탄핵 소추안이 국회에서 통과되려면 재적 의원 3분의 2 이상(200명 이상)의 찬성이 필요합니다[1][4]. 헌법재판소의 역할: 탄핵 소추안이 국회를 통과하면, 헌법재판소에서 윤 대통령의 헌법 위반 여부를 심리하게 됩니다. 헌법재판소 재판관 9명 중 6명 이상의 찬성이 있어야 탄핵이 최종적으로 인용됩니다[1][4]. 헌법재판소의 재판관 공석 문제: 현재 헌법재판소는 6인 체제로 운영되고 있어, 재판관 공석 문제로 인해 탄핵 심리가 지연되거나 불가능할 수 있다는 우려도 제기되고 있습니다[4]. 정치적 상황 야당의 압박: 야당은 윤 대통령의 비상계엄 선포를 "내란 행위"로 규정하며 강력한 탄핵 의지를 보이고 있습니다[3]. 여당의 반대: 반면, 여당인 국민의힘은 윤 대통령의 탄핵에 반대하고 있어, 국회에서 탄핵안이 통과될 수 있을지는 불확실합니다[4]. 결론적으로, 윤 대통령의 탄핵은 법적 절차와 정치적 상황에 따라 달라질 수 있으며, 현재로서는 야당의 탄핵 추진이 진행 중이지만, 헌법재판소의 재판관 공석 문제 등 여러 변수가 존재합니다. |
|
1차 결과에 대한 평가 요청 Prompt | 질문에 답변을 정확한지 5점 척도로 평가해줘 | |
평가 결과 답변 | 답변의 정확성을 5점 척도로 평가하면 다음과 같습니다:
|
|
2. 관련성 평가 - 5점 |
1차 결과에 대한 평가 요청 prompt | 질문에 답변이 관련성이 어떻게 되는지 5점 척도로 평가해줘 |
평가 결과 답변 | 답변의 관련성을 5점 척도로 평가하면 다음과 같습니다:
|
|
3. Hallucination Detection - 5점 |
1차 결과에 대한 평가 요청 prompt | 질문에 답변이 Hallucination Detection이 어떻게 되는지 5점 척도로 평가해줘 |
평가 결과 답변 | 답변의 Hallucination Detection 관련성을 5점 척도로 평가하면 다음과 같습니다:
|
2. 1차 질문을 다시 하지 않고, 1차 output을 바탕으로 평가
- 1차 질문 : 향후 유망 코인 알려줘
- 정확도 : 4점
No | Activity | Result |
1. 정확도 측정 -4.0점 |
최초 input prompt | 향후 유망 코인 알려줘 |
1차 LLM 답변 | 2024년에 주목할 만한 유망 코인들은 다양한 프로젝트와 기술을 기반으로 하고 있으며, 각 코인은 고유한 특징과 잠재력을 가지고 있습니다. 아래는 향후 성장 가능성이 높은 코인들을 소개합니다.1. Dogesquared ($DOGE2)
2. Dreamcars ($DCARS)
3. SpacePay ($SPY)
4. Race to a Billion ($BDJ)
5. FreeDum Fighters ($DUM)
|
|
1차 결과에 대한 평가 요청 Prompt | 아래 질문에 대한 답변의 정확도가 얼마인지 5점 척도로 알려줘 | |
평가 결과 답변 | 답변의 정확도는 4점 정도로 평가할 수 있습니다. 제공된 정보는 다양한 유망 코인에 대한 개요와 특징을 잘 설명하고 있으며, 각 코인의 주요 장점과 특징을 명확하게 전달하고 있습니다. 그러나, 특정 코인의 APY나 수익률과 같은 수치는 변동성이 크고, 사전 판매나 스테이킹에 대한 정보는 투자 시 주의가 필요하므로, 이러한 정보는 항상 최신 상태인지 확인하는 것이 중요합니다. 따라서, 투자 결정을 내리기 전에 추가적인 조사와 검토가 필요할 수 있습니다. | |
2. 질문-답변 일치도 - 7점/10점 |
1차 결과에 대한 평가 요청 Prompt | 위 질문과 답변의 일치도를 10점 척도로 알려줘 -> 연속 질문도 가능 |
위 질문과 답변의 일치도는 7점 정도로 평가할 수 있습니다. 질문은 "향후 유망 코인"에 대한 정보를 요청했으며, 답변은 2024년에 주목할 만한 코인들을 소개하면서 각 코인의 특징과 장점을 설명하고 있습니다. 그러나 답변에서 제공된 정보는 일부 코인의 경우 구체적인 프로젝트나 기술적 세부 사항이 부족하거나, 일부 코인은 실제로 존재하지 않거나 잘못된 정보일 가능성이 있어, 질문의 요구에 완전히 부합하지는 않습니다. 예를 들어, "Dogesquared"나 "Race to a Billion" 같은 코인은 검색 결과에서 확인되지 않았거나 명확한 정보가 부족합니다. |
3. 1개의 연속 질문을 하고, 다수의 평가 지표를 평가
- 질문: 위 질문에 대한 답변을, 정확도, 관련성, 윤리성에 대해 5점 척도로 평가하여 테이블로 만들어줘
- 결과 : 아래 table
* 문제점 1 : 동일한 질문인데, 2번째 실행의 결과 값이 1회와 달라짐 (1회: 4.0, 2회: 3.5)
-> 해결의견 : 측정의 신뢰성 향상을 위해 동일 질문을 다수 실시 (약 10회) 하여 평균/편차 데이타를 얻을 필요는 있음
*문제점 2 : 정확도에 평가 이유를 보면 "Dogesquared" 코인은 존재하지 않을 수 있다고 평가 함
-> 해결의견 : 평가 결과에 대해서도 사람이 다시 crosscheck해야 하는 방법 뿐이네.... 이래저래 사람이 check해야 되는 상황은 피할 수 없음
여러개의 질문과 답변을 파일로 upload -> 평가
case) 아래의 3개 질문과 답변을 csv 파일로 upload -> 정확도를 5점 척도로 평가 요청
문제점) 파일을 생성하지는 못한다
1) 질문 Query -> 결과를 파일로 만들어라 (진행 못함)
2) 질문 Query - 결과를 파일로 upload -> 평가 후 결과를 파일에 추가해서 만들어라 (진행 못함)
파일로 정리 작업은 별도로 필요함
6. 한계점 및 추가 고민 point
1) 한계점
그렇더라고 신뢰성의 문제가 남는다 -> 그러나 이는 사람이 해도 신뢰성과 편차의 문제가 남는다.
2) 추가 고민 point
A) 12월 릴리즈 되는 chat exaone을 이용하여, pilot 적용 후 useability 검토
B) 대량으로 input query를 사용하여, 결과를 지표별로 정리하는 방법 연구
C) B를 자동으로 할 수 있는 방법 연구
D) 위의 결과의 활용성 - BMT 를 위한 것 이외, 우리의 AI 품질을 높일 수 있는 제안 및 방법은?
Ref
2) https://arxiv.org/abs/2403.14238
3) gemini_v1_5_report_evaluation 참고자료.pdf
2) 주) 한국인공지능검증원 : (일반적인 내용만 있음)
https://www.aicerti.com/?gad_source=5&gclid=EAIaIQobChMIyYb96KiAigMViYvpBR2iBwajEAEYASAAEgLLz_D_BwE
'- 배움이 있는 삶 > - AI | Big data' 카테고리의 다른 글
프롬프트(Prompt) 작성 원칙 (0) | 2025.01.15 |
---|---|
Online java editor (1) | 2024.10.29 |
[Python] - Pandas 함수를 이용한 머신러닝 알고리즘 연습 (0) | 2024.08.25 |
[python] 구구단의 배수 제외하여 리스트 객체에 저장 (0) | 2024.08.21 |
[6/14] Anaconda에서 python library 설치하기 (0) | 2024.08.20 |