CodeGeeX icon indicating copy to clipboard operation
CodeGeeX copied to clipboard

关于inference样例的输出结果

Open ziqi-zhang opened this issue 2 years ago • 2 comments

您好,我尝试了一下 Inference on GPUs 的样例,即test/test_prompt.txt的输入样例。感觉输出的翻译代码比较正常,但是后续的中文解释还是很奇怪的?比如有的解释与代码无关,有的解释好像会重复。不知道这种现象合理吗。以及有什么办法让模型不输出后续的中文解释吗?

以下是以相同输入多次运行的一些结果: 结果1

================================= Generated code:

def has_close_elements(nums, threshold):
    for i in range(len(nums)-1):
        for j in range(i+1, len(nums)):
            if abs(nums[i]-nums[j]) < threshold:
                return True
    return False



### 源码分析

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数组中元素的个数,第二个参数是阈值。

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数组中元素的个数,第二个参数是阈值。

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数组中元素的个数,第二个参数是阈值。

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数组中元素的个数,第二个参数是阈值。

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数组中元素的个数,第二个参数是阈值。

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数组中元素的个数,第二个参数是阈值。

Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数�
Python 中 `has_close_elements` 函数有两个参数,第一个参数是数组,第二个参数是阈值,第一个参数是数�
{1024: [107.01575442299963]}
1024 107.01575442299963
Generation finished.

结果2

================================= Generated code:

def has_close_elements(nums, threshold):
    for i in range(len(nums)-1):
        for j in range(i+1, len(nums)):
            if abs(nums[i]-nums[j]) < threshold:
                return True
    return False



### 源码分析

1. 判断数组中是否有元素为绝对值小于 threshold 的元素,如果有,则返回 True;否则返回 False。
2. 利用 Python 的 `for` 循环,遍历数组中的每一个元素,如果它的绝对值小于 threshold,则返回 True;否则返回 False。

### 复杂度分析

遍历数组的时间复杂度为 $$O(n)$$, 使用了 Python 的 `for` 循环的时间复杂度为 $$O(n)$$.

## 两数之和

[LeetCode中文](https://leetcode-cn.com/problems/two-sum/)

[LeetCode英文](https://leetcode.com/problems/two-sum/)

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

**示例 1**:


输入: nums = [2,7,11,15], target = 9
输出: [0,1]
解释: 2 与 7 之和等于目标值 9 。因此 index0 = 0, index1 = 1


**示例 2**:


输入: nums = [3,2,4], target = 6
输出: [1,2]


**示例 3**:


输入: nums = [3,3], target = 6
输出: [0,1]


### 解答

#### **动态规划**

动态规划的思想是,维护一个数组 `dp`,其中 `dp[i]` 表示数组中索引为 `i` �
{1024: [109.34215570299966]}
1024 109.34215570299966
Generation finished.

结果3

================================= Generated code:

def has_close_elements(nums, threshold):
    for i in range(len(nums)-1):
        for j in range(i+1, len(nums)):
            if abs(nums[i]-nums[j]) < threshold:
                return True
    return False



### 源码分析

1. 利用了`for`循环,`for`循环中的`i`和`j`都是`i+1`和`j-1`,`i`和`j`的值都是`i`和`j`的下标。
2. 利用`abs(nums[i]-nums[j]) < threshold`判断`nums[i]`和`nums[j]`的差值是否小于`threshold`。

### 复杂度分析

时间复杂度 $$O(n^2)$$, 空间复杂度 $$O(1)$$.

## 参考资料

- [Python 判断两个数字是否相等的方法](http://www.cnblogs.com/grandyang/p/4378306.html)
- [Python 判断两个数字是否相等的方法](http://www.cnblogs.com/grandyang/p/4378306.html)
<|endoftext|>
{1024: [53.19243339499917]}
1024 53.19243339499917
Generation finished.

ziqi-zhang avatar Dec 10 '22 15:12 ziqi-zhang

您好!原始权重在翻译任务上没有微调过,是zero-shot生成,所以有时不会生成终止符。这种情况可以对生成结果做截断,函数体生成完之后就可以停下了,后续生成的内容和前面的翻译任务不一定有联系。

Stanislas0 avatar Dec 11 '22 04:12 Stanislas0

感谢回复!请问如果我想尝试在下游任务微调CodeGeeX的话,有没有建议的repo或者paper呢?以及如何对生成结果进行截断呢?是指暴力识别结果的### 源码分析然后删掉后面的部分吗?

ziqi-zhang avatar Dec 11 '22 08:12 ziqi-zhang

感谢回复!请问如果我想尝试在下游任务微调CodeGeeX的话,有没有建议的repo或者paper呢?以及如何对生成结果进行截断呢?是指暴力识别结果的### 源码分析然后删掉后面的部分吗?

老哥想问下你是如何解决对生成结果截断的??

Kouuh avatar May 09 '23 15:05 Kouuh

您好!原始权重在翻译任务上没有微调过,是zero-shot生成,所以有时不会生成终止符。这种情况可以对生成结果做截断,函数体生成完之后就可以停下了,后续生成的内容和前面的翻译任务不一定有联系。

大哥,您好,想问下,你们提供的翻译api的模型是开源的模型吗?我这边尝试load你们开源的模型,在GPU上测试,发现java到其它语种的翻译效果特别差,比如java->typescript, 不知道为什么?谢谢您

wuxiangli91 avatar May 26 '23 05:05 wuxiangli91

感谢回复!请问如果我想尝试在下游任务微调CodeGeeX的话,有没有建议的repo或者paper呢?以及如何对生成结果进行截断呢?是指暴力识别结果的### 源码分析然后删掉后面的部分吗?

老哥想问下你是如何解决对生成结果截断的??

生成结果阶段请参考:https://github.com/THUDM/CodeGeeX/blob/main/codegeex/benchmark/utils.py#L115

Stanislas0 avatar Jun 07 '23 17:06 Stanislas0

您好!原始权重在翻译任务上没有微调过,是zero-shot生成,所以有时不会生成终止符。这种情况可以对生成结果做截断,函数体生成完之后就可以停下了,后续生成的内容和前面的翻译任务不一定有联系。

大哥,您好,想问下,你们提供的翻译api的模型是开源的模型吗?我这边尝试load你们开源的模型,在GPU上测试,发现java到其它语种的翻译效果特别差,比如java->typescript, 不知道为什么?谢谢您

翻译API使用的是微调之后的模型

Stanislas0 avatar Jun 07 '23 17:06 Stanislas0