[ad_1]
Tôi thường xuyên tạo các số liệu tùy chỉnh cho các trường hợp sử dụng của riêng mình nhưng đã gặp lại các số liệu tích hợp này cho các công cụ AI trong LangChain trước khi tôi bắt đầu sử dụng RAGAS và/hoặc DeepEval để đánh giá RAG, vì vậy cuối cùng tôi cũng tò mò về cách các số liệu này được tạo và chạy phân tích nhanh (tất nhiên là có tất cả các sai lệch cố hữu).
TLDR là từ ma trận tương quan dưới đây:
- Sự hữu ích và mạch lạc (tương quan 0,46): Mối tương quan chặt chẽ này cho thấy rằng LLM (và theo proxy, người dùng) có thể nhận thấy các câu trả lời mạch lạc hữu ích hơn, nhấn mạnh tầm quan trọng của cấu trúc logic trong các câu trả lời. Nó chỉ là mối tương quan, nhưng mối quan hệ này mở ra khả năng cho điều này.
- Gây tranh cãi và Tội phạm (tương quan 0,44): Điều này cho thấy rằng ngay cả nội dung gây tranh cãi cũng có thể bị coi là tội phạm và ngược lại, có lẽ phản ánh sở thích của người dùng đối với tài liệu hấp dẫn và kích thích tư duy.
- Sự mạch lạc và độ sâu: Mặc dù sự mạch lạc tương quan với sự hữu ích, nhưng chiều sâu thì không. Điều này có thể gợi ý rằng người dùng (một lần nữa, giả sử sở thích của người dùng vốn có trong đầu ra của LLM – riêng điều này là một giả định và thành kiến quan trọng cần lưu ý) có thể thích các câu trả lời rõ ràng và ngắn gọn hơn các câu trả lời chi tiết, đặc biệt là trong các bối cảnh mà giải pháp nhanh chóng được đánh giá cao hơn những giải pháp toàn diện.
Các số liệu tích hợp được tìm thấy ở đây (loại bỏ một số liệu liên quan đến sự thật cơ bản và được xử lý tốt hơn ở nơi khác):
# Itemizing Standards / LangChain's built-in metrics
from langchain.analysis import Standards
new_criteria_list = (merchandise for i, merchandise in enumerate(Standards) if i != 2)
new_criteria_list
Các số liệu:
- sự chính xác
- Chi tiết
- Mức độ liên quan
- mạch lạc
- Tác hại
- Vô cảm
- hữu ích
- Tranh cãi
- tội phạm
- Chiều sâu
- Sáng tạo
Đầu tiên, những điều này có ý nghĩa gì và tại sao chúng được tạo ra?
Giả thuyết:
- Chúng được tạo ra nhằm nỗ lực xác định các số liệu có thể giải thích kết quả đầu ra liên quan đến các mục tiêu của trường hợp sử dụng lý thuyết và mọi mối tương quan đều có thể là ngẫu nhiên nhưng thường được tránh nếu có thể.
Tôi có giả thuyết này sau khi nhìn thấy mã nguồn này ở đây.
Thứ hai, một số trong số này có vẻ giống nhau và/hoặc mơ hồ – vậy chúng khác nhau như thế nào?
Tôi đã sử dụng tập dữ liệu SQuAD tiêu chuẩn làm cơ sở để đánh giá sự khác biệt (nếu có) giữa kết quả đầu ra từ mô hình GPT-3-Turbo của OpenAI và thực tế cơ bản trong tập dữ liệu này rồi so sánh.
# Import a normal SQUAD dataset from HuggingFace (ran in colab)
from google.colab import userdata
HF_TOKEN = userdata.get('HF_TOKEN')dataset = load_dataset("rajpurkar/squad")
print(sort(dataset))
Tôi đã nhận được một tập hợp các hàng ngẫu nhiên để đánh giá (không đủ khả năng tính toán theo thời gian và toàn bộ nội dung), vì vậy đây có thể là điểm khởi đầu cho nhiều nhiễu và/hoặc sai lệch hơn.
# Slice dataset to randomized number of 100 rows
validation_data = dataset('validation')
validation_df = validation_data.to_pandas()
sample_df = validation_df.pattern(n=100, change=False)
Tôi đã xác định một llm bằng ChatGPT 3.5 Turbo (để tiết kiệm chi phí ở đây, việc này rất nhanh chóng).
import os# Import OAI API key
OPENAI_API_KEY = userdata.get('OPENAI_API_KEY')
os.environ('OPENAI_API_KEY') = userdata.get('OPENAI_API_KEY')
# Outline llm
llm = ChatOpenAI(model_name='gpt-3.5-turbo', openai_api_key=OPENAI_API_KEY)
Sau đó, lặp lại qua các hàng được lấy mẫu để thu thập sự so sánh – có những ngưỡng không xác định mà LangChain sử dụng để ‘điểm’ trong tiêu chí đánh giá, nhưng giả định là chúng được xác định giống nhau cho tất cả các chỉ số.
# Loop by way of every query in random pattern
for index, row in sample_df.iterrows():
strive:
prediction = " ".be a part of(row('solutions')('textual content'))
input_text = row('query')# Loop by way of every standards
for m in new_criteria_list:
evaluator = load_evaluator("standards", llm=llm, standards=m)
eval_result = evaluator.evaluate_strings(
prediction=prediction,
enter=input_text,
reference=None,
other_kwarg="worth" # including extra in future for evaluate
)
rating = eval_result('rating')
if m not in outcomes:
outcomes(m) = ()
outcomes(m).append(rating)
besides KeyError as e:
print(f"KeyError: {e} in row {index}")
besides TypeError as e:
print(f"TypeError: {e} in row {index}")
Sau đó, tôi tính giá trị trung bình và CI ở khoảng tin cậy 95%.
# Calculate means and confidence intervals at 95%
mean_scores = {}
confidence_intervals = {}for m, scores in outcomes.objects():
mean_score = np.imply(scores)
mean_scores(m) = mean_score
# Normal error of the imply * t-value for 95% confidence
ci = sem(scores) * t.ppf((1 + 0.95) / 2., len(scores)-1)
confidence_intervals(m) = (mean_score - ci, mean_score + ci)
Và vẽ ra kết quả.
# Plotting outcomes by metric
fig, ax = plt.subplots()
m_labels = listing(mean_scores.keys())
means = listing(mean_scores.values())
cis = (confidence_intervals(m) for m in m_labels)
error = ((imply - ci(0), ci(1) - imply) for imply, ci in zip(means, cis)))ax.bar(m_labels, means, yerr=np.array(error).T, capsize=5, coloration='lightblue', label='Imply Scores with 95% CI')
ax.set_xlabel('Standards')
ax.set_ylabel('Common Rating')
ax.set_title('Analysis Scores by Standards')
plt.xticks(rotation=90)
plt.legend()
plt.present()
Điều này có thể trực quan rằng ‘Mức độ liên quan’ cao hơn nhiều so với các mức khác, nhưng điều thú vị là nhìn chung chúng rất thấp (có thể nhờ GPT 3.5!) và rằng ‘Tính hữu ích’ là chỉ số cao nhất tiếp theo (có thể phản ánh các kỹ thuật và tối ưu hóa RL) .
Để trả lời câu hỏi của tôi về mối tương quan, tôi đã tính toán một ma trận tương quan đơn giản với khung dữ liệu so sánh thô.
# Convert outcomes to dataframe
min_length = min(len(v) for v in outcomes.values())
dfdata = {okay.title: v(:min_length) for okay, v in outcomes.objects()}
df = pd.DataFrame(dfdata)# Filtering out null values
filtered_df = df.drop(columns=(col for col in df.columns if 'MALICIOUSNESS' in col or 'MISOGYNY' in col))
# Create corr matrix
correlation_matrix = filtered_df.corr()
Sau đó vẽ đồ thị kết quả (giá trị p được tạo sâu hơn trong mã của tôi và tất cả đều dưới 0,05)
# Plot corr matrix
masks = np.triu(np.ones_like(correlation_matrix, dtype=bool))
plt.determine(figsize=(10, 8))
sns.heatmap(correlation_matrix, masks=masks, annot=True, fmt=".2f", cmap='coolwarm',
cbar_kws={"shrink": .8})
plt.title('Correlation Matrix - Constructed-in Metrics from LangChain')
plt.xticks(rotation=90)
plt.yticks(rotation=0)
plt.present()
Điều đáng ngạc nhiên là hầu hết đều không tương quan, do tính chất của các mô tả trong cơ sở mã LangChain – điều này dẫn đến điều gì đó được cân nhắc kỹ hơn một chút và tôi rất vui vì những mô tả này đã được tích hợp sẵn để sử dụng.
Từ ma trận tương quan, xuất hiện các mối quan hệ đáng chú ý:
- Sự hữu ích và mạch lạc (tương quan 0,46): Mối tương quan chặt chẽ này cho thấy rằng LLM (vì nó là proxy cho người dùng) có thể nhận thấy các câu trả lời mạch lạc hữu ích hơn, nhấn mạnh tầm quan trọng của cấu trúc logic trong các câu trả lời. Mặc dù đây là mối tương quan nhưng mối quan hệ này lại mở đường cho điều này.
- Gây tranh cãi và tội phạm (tương quan 0,44): Điều này chỉ ra rằng ngay cả nội dung gây tranh cãi cũng có thể bị coi là tội phạm và ngược lại, có lẽ phản ánh sở thích của người dùng đối với tài liệu hấp dẫn và kích thích tư duy. Một lần nữa, đây chỉ là mối tương quan.
Takeaways:
- Sự mạch lạc và chiều sâu trong sự hữu ích: Mặc dù sự mạch lạc tương quan với sự hữu ích, nhưng chiều sâu thì không. Điều này có thể gợi ý rằng người dùng có thể thích những câu trả lời rõ ràng và ngắn gọn hơn những câu trả lời chi tiết, đặc biệt trong bối cảnh mà các giải pháp nhanh chóng được đánh giá cao hơn những giải pháp toàn diện.
- Tận dụng sự tranh cãi: Mối tương quan tích cực giữa tính gây tranh cãi và tội phạm đặt ra một câu hỏi thú vị: Liệu các chủ đề gây tranh cãi có thể được thảo luận theo cách không phạm tội không? Điều này có khả năng tăng mức độ tương tác của người dùng mà không ảnh hưởng đến chất lượng nội dung.
- Tác động của sự thiên vị và lựa chọn mô hình: Việc sử dụng GPT-3.5 Turbo và những thành kiến cố hữu trong thiết kế số liệu có thể ảnh hưởng đến những mối tương quan này. Việc thừa nhận những thành kiến này là điều cần thiết để giải thích và áp dụng chính xác các số liệu này.
Trừ khi có ghi chú khác, tất cả hình ảnh trong bài viết này đều do tác giả tạo ra.
[ad_2]
Source link